python 生成器
摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000
前面说了列表生成式,那么生成器怎么做呢
第一种方法,因为前面我们的列表生成式是用[]表示的,所以这里我们把【】换成()就行了
生成器保存的是算法
比如说我们的列表生成式是
k = 【x*x for x in range(5)】
那么我们的生成器就是
g =(x*x for x in range(5))
我们怎么调用这个生成器中的元素呢
一个是使用next()
>>> g = (x*x for x in range(5))
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
但是在实际生产中我们要是调用生成器中的元素的话,我们就使用for循环来迭代
g =(x*x for x in range(5))
for i in g:
print i
还有一种方法就是在函数中定义yield关键字
这种方法就是用yield关键字了,就像高中的根据规则,推断出函数一样,我们这里只是在里面加了一个yield
比如说这里的斐波那契函数
def fib(max):
n,a,b = 0,0,1
while n < max:
# print b
yield b
a,b = b,a+b
n = n+1
小结
generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。
要理解generator的工作原理,它是在for
循环的过程中不断计算出下一个元素,并在适当的条件结束for
循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for
循环随之结束。