python中的生成器 generator yield

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

今天再来复习一遍


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值