все Python 3устарело в 3.9astпонятие
ast.Param
переменные
Устаревший с 3.9 контекст выражения из Python 2, где им помечались параметры функции; парсер Python 3 его не создаёт.
Синтаксис
ast.Param()
В Python 3 параметры — отдельные узлы arg без поля ctx, поэтому Param в дереве из ast.parse не встретится никогда, а подсунутый вручную compile() отвергнет. Класс ещё импортируется, и код, проверяющий isinstance(ctx, ast.Param), молча ничего не находит; параметры ищут по ast.arg. Объявлен к удалению в будущих версиях вместе с Suite, AugLoad и AugStore.
Примеры
import ast
tree = ast.parse('def f(a, b): pass')
params = [n.arg for n in ast.walk(tree) if isinstance(n, ast.arg)]
print(params) # → ['a', 'b']
print(any(isinstance(getattr(n, 'ctx', None), ast.Param) for n in ast.walk(tree))) # → False
import ast
m = ast.parse('x = 1')
m.body[0].targets[0].ctx = ast.Param()
try:
compile(m, '<ast>', 'exec')
except TypeError as e:
print(type(e).__name__) # → TypeError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности