python 斐波那契数列 yield_Python yield与斐波那契数列问题

def fib():

a,b=0,1

while True:

yield b

a=b

b=a+b

i=10

while i>0:

print fib().next()

i-=1

输出的全是1,而

def fib():

a,b=0,1

while True:

yield b

a=b

b=a+b

f=fib()

i=10

while i>0:

print f.next()

i-=1

输出的就是斐波那契数列呢?

用yield这种函数叫做生成器(generater)如果你每次都调用fib()他会每次都实例化一个新的生成器,但是如果你先把f赋值成这个生成器的话 他就会正常的每次从yield的位置执行,不断生成新的数

每次调用 fib()实际都生成了一个新的实例 可以看到其地址是不一样的 所以不是同一个对象

而用 f=fib()以后, f 是一个实例,它可以正常迭代>>> def fib():

... a,b = 0,1

... while True:

... yield b

... a = b

... b = a + b

...

>>> f = fib()

>>> fib()

>>> fib()

>>> f

>>> f

如果你吧 fib() 放到 while 里,那么每次调用的都是从新执行的函数 fib,并不会 share或者可能抹掉之前 yield 的状态,那么他的 next 永远是第一个。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19680.html

相关文章 Recommend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值