python3: генератор Фибоначчи не работает должным образом - PullRequest
0 голосов
/ 05 октября 2019

Я знаю, что ниже приведена неоптимальная реализация генератора Фибоначчи по сравнению с этим , но я не могу понять, почему он не работает должным образом:


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 Ответ

5 голосов
/ 05 октября 2019

Вы создаете новый генератор в каждой итерации цикла. Сделайте вместо этого:

fib = fibonacci_sequence()

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

Чтобы создать всю последовательность с самого начала, вам может потребоваться yield fp вместо yield (fl + fp).

...