码迷,mamicode.com
首页 > 编程语言 > 详细

python 迭代器&&生成器

时间:2018-10-25 21:11:47      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:for   通过   方法   end   一个   pre   ext   tar   log   


有一篇文章写得迭代器和生成器,写得很好:https://www.cnblogs.com/wj-1314/p/8490822.html

#列表生成器
print([i*2 for i in range(10)])

#生成器:调用时才会产生相应的数据,不调用时不暂用内存,同时只记住当前的位置,只有一个__next__()方法
b=(i*2 for i in range(10))
for i in b:
print(i)

什么是生成器?

  通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

  所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator

  生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

  生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器

 

什么是迭代器?

  Iterable:直接作用于for循环的对象

  Iterator:可以被next()函数调用并不断返回下一个值的对象称为迭代器,迭代器可以通过iter()函数获得一个Iterator对象

 

python 迭代器&&生成器

标签:for   通过   方法   end   一个   pre   ext   tar   log   

原文地址:https://www.cnblogs.com/wendyw/p/9724819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!