python中的生成器 generator yield

来源:互联网 发布:淘宝卖家评分怎么算的 编辑:程序博客网 时间:2024/04/29 22:38

今天复习廖大的教程,复习到了生成器,之前这里看过一遍,但是已经忘的差不多了

今天再来复习一遍


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 11>>> next(o)step 23>>> next(o)step 35

原创粉丝点击