我知道,与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
关键字下更新生成器的状态吗?
答案 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)
。