yield
:
def fibonacci_generator(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# Пример использования:
for num in fibonacci_generator(10):
print(num)
Ключевое слово yield
приостанавливает выполнение функции и возвращает значение. При следующем вызове функция возобновляет выполнение с того места, где остановилась. Это позволяет создавать последовательность чисел "лениво", по требованию, экономя память.
Для создания генератора последовательности чисел Фибоначчи с помощью yield
, мы можем написать функцию, которая будет вычислять следующее число Фибоначчи и "выдавать" его, не завершая при этом свою работу. Это позволяет нам генерировать числа по требованию, экономя память.
Вот пример кода на Python:
def fibonacci_generator(n):
"""
Генератор последовательности чисел Фибоначчи до n-го числа.
"""
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# Пример использования:
for num in fibonacci_generator(10):
print(num) # Выводит: 0 1 1 2 3 5 8 13 21 34
Разберем код:
def fibonacci_generator(n):
: Определяем функцию-генератор fibonacci_generator
, которая принимает аргумент n
, определяющий, сколько чисел Фибоначчи необходимо сгенерировать.a, b = 0, 1
: Инициализируем первые два числа Фибоначчи: a
как 0 и b
как 1.for _ in range(n):
: Запускаем цикл, который будет повторяться n
раз. Использование _
в цикле означает, что мы не используем значение итератора напрямую.yield a
: Ключевое слово yield
"выдает" текущее значение a
(очередное число Фибоначчи) и приостанавливает выполнение функции. При следующем запросе на следующее значение, функция продолжит выполнение с этой точки.a, b = b, a + b
: Обновляем значения a
и b
для вычисления следующего числа Фибоначчи. a
становится равным текущему b
, а b
становится равным сумме предыдущих a
и b
.Как это работает:
Когда мы вызываем fibonacci_generator(10)
, создается объект-генератор. Этот объект не вычисляет сразу все числа Фибоначчи. Вместо этого, он вычисляет и "выдает" следующее число только когда мы его запрашиваем (например, в цикле for
). При каждом вызове yield
, функция приостанавливается и сохраняет свое состояние. Когда мы просим следующее значение, функция возобновляет выполнение с того места, где она была приостановлена, вычисляет следующее число и снова "выдает" его.
Преимущества использования генератора: