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, функция приостанавливается и сохраняет свое состояние. Когда мы просим следующее значение, функция возобновляет выполнение с того места, где она была приостановлена, вычисляет следующее число и снова "выдает" его.
Преимущества использования генератора: