Python Glossary English

все 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Сообщить о неточности