Python 3.3+astпонятие
ast.YieldFrom
функции и классы
Узел выражения yield from <итерируемое>: делегирование подгенератору. Поле value — выражение, из которого берутся значения. Появился в 3.3.
Синтаксис
ast.YieldFrom(value)
Это выражение, а не инструкция: строка yield from g() разбирается как Expr со значением YieldFrom, а r = yield from g() — как Assign. Функция с YieldFrom — генератор, это видно только по наличию узла в теле. ast.parse не проверяет, что yield from стоит внутри функции; ошибку даст лишь compile.
Примеры
import ast
g = ast.parse('def g():\n r = yield from range(3)').body[0]
node = g.body[0].value
print(type(g.body[0]).__name__, type(node).__name__, ast.unparse(node.value))
# → Assign YieldFrom range(3)
import ast
tree = ast.parse('yield from x')
print(type(tree.body[0].value).__name__) # → YieldFrom
try:
compile(tree, '<ast>', 'exec')
except SyntaxError as e:
print(type(e).__name__) # → SyntaxError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности