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
输出的就是斐波那契数列呢?
每次调用 fib()实际都生成了一个新的实例 可以看到其地址是不一样的 所以不是同一个对象
而用 f=fib()以后, f 是一个实例,它可以正常迭代
如果你吧 fib() 放到 while 里,那么每次调用的都是从新执行的函数 fib,并不会 share或者可能抹掉之前 yield 的状态,那么他的 next 永远是第一个。
用yield这种函数叫做生成器(generater)如果你每次都调用fib()他会每次都实例化一个新的生成器,但是如果你先把f赋值成这个生成器的话 他就会正常的每次从yield的位置执行,不断生成新的数