gpt4 book ai didi

Python 斐波那契数列生成器

转载 作者:行者123 更新时间:2023-12-01 09:31:50 24 4
gpt4 key购买 nike

我目前正在学习 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 ) 返回给调用者。

为了节省一点时间并使事情完全清楚,有几个问题。

  1. 在第一次迭代中,唯一出现的是返回 a 的初始值吗?它是否完全停止在屈服点?

  2. 在第二次迭代中,它从哪里得到 1?如果 a, b = b,那么 a + b 就是 1+1,那么为什么第二个值不返回为 2?

  3. 我也不确定相同的值 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com