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

pka*_*mol 0 fibonacci python-3.x

我知道下面是一个不理想的实现相比,斐波那契数发生器的这个,但我似乎无法理解为什么它不按预期工作:


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()))
Run Code Online (Sandbox Code Playgroud)

它始终保持打印2。

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

sch*_*ggl 5

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

fib = fibonacci_sequence()

for i in range(10):
    print(next(fib))  # keep calling next on the same generator object
Run Code Online (Sandbox Code Playgroud)

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