Python 3.14+astфункция
ast.compare()
вспомогательные функции
Рекурсивно сравнивает два дерева AST по структуре и значениям полей. Отвечает, одинаков ли код с точностью до форматирования. Появилась в 3.14.
Синтаксис
ast.compare(a, b, /, *, compare_attributes=False)
Оператор == у узлов сравнивает объекты по идентичности, поэтому два одинаковых разбора дают False — нужна именно эта функция. По умолчанию позиции (lineno, col_offset) игнорируются, и 'x=1' равно 'x = 1 # c'; compare_attributes=True сравнивает и их. До 3.14 то же получают сравнением строк ast.dump() в одной версии Python.
Примеры
# Python 3.14+
import ast
a = ast.parse('x=1')
b = ast.parse('x = 1 # c')
print(a == b) # → False
print(ast.compare(a, b)) # → True
print(ast.compare(a, b, compare_attributes=True)) # → False
import ast
a = ast.parse('x=1')
b = ast.parse('x = 1 # c')
print(ast.dump(a) == ast.dump(b)) # → True — способ до 3.14
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности