Python: как работает yield

Ключевое слово "yield" в Python используется для создания генераторов - специальных функций, которые могут временно приостанавливать своё выполнение и возвращать промежуточное значение. Когда вызывается функция-генератор с помощью оператора "next()", она выполняется до первого оператора "yield", который возвращает значение и приостанавливает выполнение функции.

При следующем вызове функции-генератора выполнение продолжается с момента, где был остановлен предыдущим оператором "yield", и так далее до тех пор, пока все значения не будут исчерпаны.

Ниже приведен пример функции-генератора, которая возвращает квадраты чисел от 1 до 5:


    def squares():
        for i in range(1, 6):
            yield i**2
    
    # Пример использования функции-генератора
    for square in squares():
        print(square)
    

Вывод:


    1
    4
    9
    16
    25
    

Детальный ответ

Приветствую! Сегодня мы поговорим о том, как работает оператор yield в языке программирования Python.

Оператор yield используется в функциях-генераторах и позволяет временно "приостановить" выполнение функции, сохранить ее состояние и выдать (yield) значение в вызывающий код. Затем, при следующем вызове, функция продолжает выполнение с того же самого состояния, где остановилась.

Для более полного понимания, рассмотрим пример. У нас есть функция-генератор, которая возвращает числа от 1 до 5:

    
      def generator_function():
          yield 1
          yield 2
          yield 3
          yield 4
          yield 5

      # Создаем объект генератора
      generator = generator_function()

      # Выводим значения, возвращаемые генератором
      print(next(generator))  # 1
      print(next(generator))  # 2
      print(next(generator))  # 3
      print(next(generator))  # 4
      print(next(generator))  # 5
    
  

В данном примере мы создали функцию generator_function() с использованием оператора yield. Затем мы вызвали эту функцию и присвоили ее результат переменной generator. Далее мы использовали функцию next() для получения значений из генератора по одному.

Каждый раз, когда мы вызываем next(), функция-генератор generator_function() выполняется до следующего оператора yield и возвращает значение. Затем она становится "приостановленной" и ждет следующего вызова next().

Кроме того, вместо использования функции next() мы можем также использовать цикл for для итерации по значениям генератора:

    
      for value in generator:
          print(value)
    
  

Этот код выведет все значения от 1 до 5, полученные из генератора. Заметьте, что нам не нужно заботиться о том, когда остановиться, генератор самостоятельно останавливается, когда больше нет значений для возврата.

Оператор yield не только позволяет создавать бесконечные последовательности, но и экономит память, так как он сохраняет только текущее состояние функции-генератора, в отличие от списка, который бы хранил все значения.

Для общего представления, рассмотрим другой пример. Представим, у нас есть функция-генератор, которая генерирует числа Фибоначчи:

    
      def fibonacci():
          a, b = 0, 1
          while True:
              yield a
              a, b = b, a + b

      # Создаем генератор
      fib = fibonacci()

      # Выводим первые 10 чисел Фибоначчи
      for i in range(10):
          print(next(fib))
    
  

В этом примере мы использовали бесконечный цикл while True и оператор yield, чтобы генерировать числа Фибоначчи. Затем мы создали генератор fib и использовали цикл for, чтобы вывести первые 10 чисел Фибоначчи.

Благодаря оператору yield, генератор может "приостановить" свое выполнение и вернуть текущее значение (число Фибоначчи). Это позволяет нам генерировать числа в бесконечном режиме без необходимости хранить их все в памяти.

В заключение, оператор yield предоставляет мощный инструмент для создания функций-генераторов и бесконечных последовательностей. Он позволяет "приостановить" выполнение функции, сохранить ее состояние и возвратить значение. Затем функция может быть возобновлена с того же самого места, где остановилась.

Надеюсь, этот материал был полезен для вашего понимания работы оператора yield в Python!

Видео по теме

49 Функция генератор. Создание генератора при помощи yield Python

#55. Функция-генератор. Оператор yield | Python для начинающих

Уроки Python casts #10 - Что такое yield

Похожие статьи:

Что такое подстрока в строке в Питоне: объяснение и примеры

Как заставить питон ждать нажатия кнопки и учить его танцевать 💃

Как сортировать пары в Python: полезные советы и примеры кода

Python: как работает yield

🔍 Как создать индекс в Python: простой руководство для начинающих

Как писать асинхронный код в Python: лучшие практики и советы

Как узнать дату создания файла в Python? Полезный гайд