为了账号安全,请及时绑定邮箱和手机立即绑定

python yield问题?

python yield问题?

四季花海 2019-03-29 22:08:34
deffib():a,b=0,1whileTrue:yieldba=bb=a+bi=10whilei>0:printfib().next()i-=1输出的全是1,而deffib():a,b=0,1whileTrue:yieldba=bb=a+bf=fib()i=10whilei>0:printf.next()i-=1输出的就是斐波那契数列呢?
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

每次调用fib()实际都生成了一个新的实例可以看到其地址是不一样的所以不是同一个对象
而用f=fib()以后,f是一个实例,它可以正常迭代
>>>deffib():
...a,b=0,1
...whileTrue:
...yieldb
...a=b
...b=a+b
...
>>>f=fib()
>>>fib()
>>>fib()
>>>f
>>>f
                            
查看完整回答
反对 回复 2019-03-29
?
HUWWW

TA贡献1874条经验 获得超12个赞

如果你吧fib()放到while里,那么每次调用的都是从新执行的函数fib,并不会share或者可能抹掉之前yield的状态,那么他的next永远是第一个。
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 378 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信