Сообщить об ошибке.

Выражение/оператор yield в Python

Оператор yield семантически эквивалентен выражению yield. Понятия оператор yield и выражение yield отличаются наличием скобок. Оператор yield используется без скобок, которые требуются в эквивалентном выражении yield.

yield <expression>
yield from <expression>

# эквивалентно операторам выражения yield

(yield <expression>)
(yield from <expression>)

Выражение yield используется при определении функции генератора или асинхронной функции генератора и, следовательно, может использоваться только в теле определения функции. Использование выражения yield в теле функции приводит к тому, что эта функция является генератором, а использование его в теле функции сопрограммы async def приводит к тому, что она становится асинхронным генератором.

Например:

# определяет функцию генератора
def gen(): 
    yield 123

# определяет функцию асинхронного генератора
async def agen():
    yield 123

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

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

Как работает выражение yield в функциях генераторов можно узнать из разделов: