Python 斐波那契生成器序列

3

我正在学习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)返回给调用者。
为了节省时间并使事情更加清晰,我有几个问题。
  1. 在第一次迭代中,唯一出现的是返回a的初始值吗?它是否完全停止在yield处?
  2. 在第二次迭代中,它从哪里获得1? 如果a、b = b,则a + b将为1+1,那么为什么第二个值没有返回为2?
  3. 我也不确定为什么会返回相同的值1两次。
总之,我想知道每行输出的具体操作是什么。我似乎无法弄清楚这部分内容。请注意,我已经在很多不同的地方查找过,但没有看到任何有用的信息。
2个回答

3
为了说明背景,fibonacci_generator是一个生成器函数,返回一个生成器,实际上只是一个迭代器对象。
在第一次迭代中,生成器产生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

如果你遵循这个逻辑,就会明白为什么那段代码会表现出这样的行为。

0
无论何时你有一个赋值语句,左边的变量在右边的赋值语句完成之前不会被赋值。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接