我正在学习Python,但在斐波那契数列生成器上遇到了问题。经过几个小时的研究,我没有取得太多进展。我在一定程度上理解输出结果,但在每次迭代时发生了什么,我不感到很舒服,所以希望能够解决这个问题。
def fibonacci_generator() :
a , b = 0 , 1
while True :
yield a
a , b = b , a + b
fib = fibonacci_generator()
for i in fib :
if i > 100 :
break
else :
print( 'Generated:' , i )
运行此代码后,我看到以下输出。
Generated: 0
Generated: 1
Generated: 1
Generated: 2
Generated: 3
Generated: 5
Generated: 8
Generated: 13
Generated: 21
Generated: 34
Generated: 55
Generated: 89
根据Stack Overflow上类似问题的几个答案,我理解第一次调用生成器时,a和b分别被初始化为0和1,然后将带有yield语句的值(a=0)返回给调用者。
为了节省时间并使事情更加清晰,我有几个问题。
- 在第一次迭代中,唯一出现的是返回a的初始值吗?它是否完全停止在yield处?
- 在第二次迭代中,它从哪里获得1? 如果a、b = b,则a + b将为1+1,那么为什么第二个值没有返回为2?
- 我也不确定为什么会返回相同的值1两次。