我目前正在学习 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和be分别初始化为0和1,然后使用yield语句(a = 0 ) 返回给调用者。
为了节省一点时间并使事情完全清楚,有几个问题。
在第一次迭代中,唯一出现的是返回 a 的初始值吗?它是否完全停止在屈服点?
在第二次迭代中,它从哪里得到 1?如果 a, b = b,那么 a + b 就是 1+1,那么为什么第二个值不返回为 2?
我也不确定相同的值 1 如何返回两次。
综上所述,我想知道输出的每一行具体操作是什么。我似乎无法在脑海中理清这一部分。让我重申一下,我已经看过很多不同的地方,但我所看到的没有任何帮助。
最佳答案
为了说明背景,fibonacci_generator 是一个生成器函数,它返回一个生成器,实际上只是一个迭代器对象。 p>
在第一次迭代中,生成器生成 a,并停在那里,直到您再次调用它。再次调用它后,它会重新计算 a 和 b,因为它是 True,所以进入循环,并生成重新计算的 a。它只是不断重复这个过程。
对于你的第二个问题和第三个问题:
只要有赋值语句,左侧的变量就不会被赋值,直到赋值语句的右侧完成为止。
因此,在
a、b = b、a + b
a + b
时,a
不等于b
,但它等于原来的值。换句话说,a, b = b, a + b
相当于:
temp = a
a = b
b = temp + b
如果您遵循这个逻辑,您就会明白为什么该代码会这样运行。
关于Python 斐波那契数列生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49894424/