yield

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

Процесс работы yield:

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

  2. Когда вы вызываете next() для генератора (или используете его в цикле for), выполнение функции продолжается с точки, на которой было приостановлено до ближайшего оператора yield.

  3. Значение, указанное после yield, возвращается как результат выполнения next().

  4. После выполнения оператора yield, состояние функции сохраняется, и при следующем вызове next(), выполнение продолжается с того места, на котором оно было приостановлено, и так далее, пока не достигнут конец функции или не вызван оператор return.

Пример использования yield:

def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()

# При первом вызове next() выполнение функции начнется с начала и будет приостановлено на первом операторе yield
print(next(gen))  # Вывод: 1

# При следующем вызове next() выполнение продолжится с точки, на которой было приостановлено, и будет приостановлено на следующем операторе yield
print(next(gen))  # Вывод: 2

# То же самое произойдет при последнем вызове next()
print(next(gen))  # Вывод: 3

# После того как все значения были возвращены, вызов next() вызовет исключение StopIteration, чтобы указать, что итерация завершена

Last updated