python3:斐波那契发生器未按预期工作

时间:2019-10-05 09:40:15

标签: python-3.x fibonacci

我知道,与this相比,以下是斐波那契生成器的次佳实现,但是我似乎无法理解为什么它无法按预期运行:


def fibonacci_sequence():
    fl, fp = 1, 1
    while True:
        yield (fl + fp)
        store = fl + fp
        fp = fl
        fl = store


for i in range(10):
    print(next(fibonacci_sequence()))

它始终保持打印2。

不是在每次迭代的yield关键字下更新生成器的状态吗?

1 个答案:

答案 0 :(得分:5)

您将在每次循环迭代中实例化一个 new 生成器。改为:

fib = fibonacci_sequence()

for i in range(10):
    print(next(fib))  # keep calling next on the same generator object

要从头开始生成整个序列,您可能希望使用yield fp而不是yield (fl + fp)