Python 斐波那契数列生成器

标签 python fibonacci yield

我目前正在学习 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/

相关文章:

python - DropBox - 无法生成访问 token /缺少范围?

javascript - 为什么在 javascript 中计算斐波那契比在 haskell 中更快?

python - PySpark - 从 Numpy 矩阵创建 DataFrame

python - 使用 python 搜索/替换 html 文件中的文本

python - Google App Engine Python : Class Definition “Invalid Syntax”

algorithm - 快速倍增和斐波那契算法解释

c++ - 计算斐波那契数的模板元编程

python - 有时我想要一个发电机

python - 在 asyncio.Protocol.data_received 中调用协程

javascript - 需要在 OR 赋值中的 yield 表达式周围加上括号的确切句法歧义是什么?