Python yield与斐波那契数列问题,pythonyield,def fib():
Python yield与斐波那契数列问题,pythonyield,def fib():
def fib(): a,b=0,1 while True: yield b a=b b=a+bi=10while i>0: print fib().next() i-=1
输出的全是1,而
def fib(): a,b=0,1 while True: yield b a=b b=a+bf=fib()i=10while 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()<generator object fib at 0x1036e8af0>>>> fib()<generator object fib at 0x1036e8aa0>>>> f<generator object fib at 0x1036e8a50>>>> f<generator object fib at 0x1036e8a50>
如果你吧 fib() 放到 while 里,那么每次调用的都是从新执行的函数 fib,并不会 share或者可能抹掉之前 yield 的状态,那么他的 next 永远是第一个。
编橙之家文章,
相关内容
- Python函数无法运行源码有问题吗?,python源码,>>&g
- Python扩展包问调用C++扩展方式,python,对方只提供了.s
- 想用Python随机生成多个不重复坐标需要用到什么库或是
- 按照《flask web开发》书中方法操作,发不出确认邮件是
- Python动态调用其他模块函数操作问题,python动态模块函
- 需要一个python脚本返回的思路,求分享,python脚本,新手
- Python import语法在python2与python3中有何区别,python2pytho
- Python如何时将部分utf8编码转义成中文内容,,现有1.tx
- Python Flask django项目时区设置遇到的问题,flaskdjango,dj
- Python3 rabbitmq NameError问题求助,python3nameerror,学习使用
评论关闭