все Python 3astпонятие
ast.Global
функции и классы
Узел инструкции global a, b: names — список строк с именами; объявляет, что присваивания в функции идут в глобальную область.
Синтаксис
ast.Global(names)
names — строки, а не узлы Name, поэтому ast.walk, ищущий Name, глобальные объявления не увидит. Global действует на всю функцию, а не с места записи; использовать имя до объявления — SyntaxError, но парсер ast.parse его пропускает: ошибку даёт только compile() — символьная таблица строится позже. nonlocal — отдельный узел Nonlocal.
Примеры
import ast
fn = ast.parse('def f():\n global counter, total\n counter += 1').body[0]
g = fn.body[0]
print(type(g).__name__, g.names) # → Global ['counter', 'total']
import ast
src = 'def f():\n x = 1\n global x'
tree = ast.parse(src)
print(type(tree.body[0].body[1]).__name__) # → Global
try:
compile(tree, '<f>', 'exec')
except SyntaxError as e:
print(type(e).__name__) # → SyntaxError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности