Оператор 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
в функциях генераторов можно узнать из разделов: