Python Glossary English

все Python 3astпонятие

ast.AST

корень и базовые узлы

Базовый класс всех узлов синтаксического дерева: от него наследуют Module, выражения, инструкции и операторы, которые возвращает ast.parse().

Синтаксис

class ast.AST; node._fields; node.lineno, node.col_offset

Узлы сравниваются по идентичности, а не по содержимому: ast.parse('x') == ast.parse('x') даёт False, для сравнения деревьев сравнивают ast.dump() (или ast.compare() с 3.14). Имена полей узла лежат в атрибуте класса _fields, а координаты lineno и col_offset есть у выражений, инструкций и части служебных узлов (arg, keyword, alias, except-ветки, образцы, параметры типа) — у операторов вроде Add их нет. Вывод repr() узла изменился в 3.14 (стал показывать поля), поэтому в тестах полагаются на конкретные поля, а не на печать узла целиком.

Примеры

import ast
tree = ast.parse('x + 1')
print(isinstance(tree, ast.AST))  # → True
print(ast.BinOp._fields)  # → ('left', 'op', 'right')
print(tree == ast.parse('x + 1'))  # → False — узлы сравниваются по идентичности
print(ast.dump(tree) == ast.dump(ast.parse('x + 1')))  # → True
import ast
node = ast.parse('a = 10').body[0]
print(node.lineno, node.col_offset, node.end_col_offset)  # → 1 0 6
print(hasattr(ast.Add(), 'lineno'))  # → False

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности