все Python 3astпонятие
ast.Load
переменные
Контекст чтения в поле ctx у Name, Attribute, Subscript, List, Tuple, Starred: значение берётся, а не присваивается или удаляется.
Синтаксис
ast.Name(id, ctx=ast.Load())
Тип контекста — единственное, что отличает чтение x от присваивания x = … в узле Name, поэтому поиск «где переменная используется» проверяет isinstance(node.ctx, ast.Load). CPython раздаёт один и тот же объект Load на всё дерево, так что подменять поля у ctx нельзя. До 3.13 узел, собранный без ctx, не компилировался; с 3.13 ctx по умолчанию — Load().
Примеры
import ast
tree = ast.parse('x = x + 1')
names = [n for n in ast.walk(tree) if isinstance(n, ast.Name)]
print([(n.id, type(n.ctx).__name__) for n in names]) # → [('x', 'Store'), ('x', 'Load')]
import ast
a = ast.parse('a', mode='eval').body.ctx
b = ast.parse('b', mode='eval').body.ctx
print(a is b) # → True — один общий объект
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности