Python Glossary English

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