На этом шаге мы рассмотрим получение последовательности чисел Фибоначчи с помощью генератора.
До сих пор мы писали функции, которые выводят одно значение из последовательности Фибоначчи. А что, если вместо этого мы хотим вывести всю последовательность вплоть до некоторого значения? С помощью оператора yield функцию fib5() можно легко преобразовать в генератор Python. В процессе итерирования генератора на каждой итерации будет выводиться значение последовательности Фибоначчи с использованием оператора yield.
from typing import Generator def fib6(n: int) -> Generator[int, None, None]: yield 0 # специальный случай if n > 0: yield 1 # специальный случай last: int = 0 # начальное значение fib(0) next: int = 1 # начальное значение fib(1) for _ in range(1, n): last, next = next, last + next yield next # главный этап генерации if __name__ == "__main__": for i in fib6(50): print(i)
Если запустить fib6().py, то будет напечатано первое 51 число из последовательности Фибоначчи. На каждой итерации цикла for i in fib6(50): функция fib6() выполняется до оператора yield.
0 1 1 2 3 5 8 13 21 34 . . . . 1836311903 2971215073 4807526976 7778742049 12586269025
Если достигнут конец функции и операторов yield больше нет, то цикл завершает итерирование.
На следующем шаге мы рассмотрим простейшее сжатие.