все Python 3astпонятие
ast.expr_context
переменные
Абстрактный класс контекста имени: Load (чтение), Store (запись), Del (удаление). Поле ctx у Name, Attribute, Subscript, List, Tuple, Starred.
Синтаксис
isinstance(node.ctx, ast.Store)
По ctx отличают присваивание переменной от чтения без анализа родителя: в a[i] = b сам Subscript в Store, а a и i внутри него — в Load. При обходе по ctx легко найти все переменные, которые программа меняет. Наследники AugLoad, AugStore и Param ещё существуют, но парсер их давно не создаёт.
Примеры
import ast
target = ast.parse('a[i] = b').body[0].targets[0]
print(type(target.ctx).__name__, type(target.value.ctx).__name__) # → Store Load
import ast
tree = ast.parse('x = 1\ny += x\ndel z')
for n in ast.walk(tree):
if isinstance(n, ast.Name):
print(n.id, type(n.ctx).__name__) # → x Store / y Store / z Del / x Load
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности