Python 3.8+astпонятие
ast.NamedExpr
выражения
Узел моржового оператора (x := value): target — Name со Store, value — выражение.
Синтаксис
ast.NamedExpr(target, value)
Это выражение, а не инструкция: (x := 1) на верхнем уровне разбирается в Expr с NamedExpr внутри, а без скобок x := 1 — SyntaxError ещё в ast.parse. Цель — только простое имя: в отличие от Assign, туда не попадут ни атрибут, ни индекс, ни кортеж. Ищите присваивания и по NamedExpr, иначе переменные из if (n := len(a)) > 10 потеряются.
Примеры
import ast
stmt = ast.parse('if (n := len(a)) > 10: pass').body[0]
w = stmt.test.left
print(type(w).__name__, w.target.id, type(w.target.ctx).__name__) # → NamedExpr n Store
import ast
try:
ast.parse('x := 1')
except SyntaxError as e:
print(type(e).__name__) # → SyntaxError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности