列表生成式 生成器 迭代器
举个例子
列表[0, 1, 2, 3, 4, 5, 6],要求把列表里的每个值加1,如何实现呢?
1 L=[0, 1, 2, 3, 4, 5, 6] 2 a={i+1 for i in L} 3 print(a)
运行结果:{1, 2, 3, 4, 5, 6, 7}
说明:以上例子的实现方法就叫做列表生成式。
[]改成(),就创建了一个generator。
1 L =(i+1 for i in range(6)) 2 for i in L: 3 print(i)
运行结果:1 2 3 4 5 6
注意:generator即生成器保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
方法2:使用yield创建生成器,即生成器函数。
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
例子:
1 def updown(n): 2 for x in range(1, n): yield x 3 for i in updown(10): 4 print(i)
运行结果:1 2 3 4 5 6 7 8 9
next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。 凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python语言的for循环本质上就是通过不断调用next()函数实现的。
原文:http://www.cnblogs.com/renyongbin/p/6418076.html