今天复习廖大的教程,复习到了生成器,之前这里看过一遍,但是已经忘的差不多了
今天再来复习一遍
python中的generator保存的是算法,真正需要计算出值的时候才会去往下计算出值。它是一种惰性计算(lazy evaluation)。
第一种方法:把一个列表生成式的[]
改成()
,就创建了一个generator:
>>> g = (x*x for x in range(11))
>>> for i in g:
print(i)
这里就是一个生成器
现在来按照斐波那契数列写一个方法:
>>> def fib(x):
n,a,b=0,0,1
while n < x:
print(b)
a,b = b,a+b
n = n+1
return "done"
第二种方式:在函数中使用yield关键字,函数就变成了一个generator。
函数里有了yield后,执行到yield就会停住,当需要再往下算时才会再往下算。所以生成器函数即使是有无限循环也没关系,它需要算到多少就会算多少,不需要就不往下算。
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
>>> o = odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5