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