все Python 3astпонятие
ast.Lt
операторы
Маркер сравнения < в дереве ast: лежит в поле Compare.ops и полей не имеет.
Синтаксис
ast.Lt()
Python разбирает '1 < x < 10' как одно сравнение: Compare(left=1, ops=[Lt, Lt], comparators=[x, 10]). Анализатору, ищущему «x меньше 10», нужно пройти ops и comparators парами, а не смотреть только на left. Узлы-маркеры сравнивают по типу (isinstance), а не через ==: у узлов ast нет __eq__, и ast.Lt() == ast.Lt() — False.
Примеры
import ast
c = ast.parse('1 < x < 10', mode='eval').body
pairs = [(type(o).__name__, ast.unparse(v)) for o, v in zip(c.ops, c.comparators)]
print(pairs) # → [('Lt', 'x'), ('Lt', '10')]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности