все Python 3astпонятие
ast.Store
переменные
Контекст «запись» у Name, Attribute, Subscript, Starred, List и Tuple: узел стоит слева от = или служит целью for или with … as.
Синтаксис
ast.Store()
Store появляется не только в x = 1: целью он помечен и в x += 1, for x in …, with f() as x, (x := 1) и import не трогает — там alias со строкой. Парсер переиспользует один и тот же объект Store для всех узлов, поэтому node.ctx is другой_ctx истинно; менять атрибуты у ctx нельзя — правка разойдётся по всему дереву. Проверяйте isinstance(node.ctx, ast.Store), а не сравнение с ast.Store().
Примеры
import ast
tree = ast.parse('for i in items:\n total += i')
stored = [n.id for n in ast.walk(tree) if isinstance(n, ast.Name) and isinstance(n.ctx, ast.Store)]
print(sorted(stored)) # → ['i', 'total']
import ast
a = ast.parse('x = 1').body[0].targets[0].ctx
b = ast.parse('y = 2').body[0].targets[0].ctx
print(a is b, a == ast.Store()) # → True False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности