1.简介
在Python中,生成器是一种边循环边计算的惰性机制,需要我们手动去提取这些元素。
2.示例
(表达式 循环体 条件语句)
注:列表生成式的[]
改成()
,就创建了一个generator.
1 >>> L1=[1, 2, 3, 4, 5, 6] 2 >>> g=(x*x for x in L1) 3 >>> g 4 <generator object <genexpr> at 0x0268E968> 5 >>> next(g) #也可以使用g.next() 6 1 7 >>> next(g) 8 4
也可以直接使用循环(避免抛出错误):
1 >>> for n in g: 2 print(n)
3.函数生成器
斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
函数:
1 def fib(max): 2 n, a, b = 0, 0, 1 3 while n < max: 4 print b 5 a, b = b, a + b 6 n = n + 1
计算结果:
1 >>> fib(4) 2 1 3 1 4 2 5 3
如何将上述函数编程生成器呢?方法如下:把print b
改为yield b。
函数:
1 def fib(max): 2 n, a, b = 0, 0, 1 3 while n < max: 4 yield b 5 a, b = b, a + b 6 n = n + 1
计算结果:
1 >>> f = fib(6) 2 >>> f 3 <generator object fib at 0x104feaaa0> 4 >>> for n in fib(6): 5 ... print(n) 6 1 7 1 8 2 9 3 10 5 11 8