列表生成式 生成器 迭代器
举个例子
列表[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