все Python 3astпонятие
ast.Sub
операторы
Оператор вычитания - в поле op узлов BinOp и AugAssign.
Синтаксис
ast.Sub()
Sub — только бинарный минус: -x разбирается в UnaryOp(USub). Вычитание левоассоциативно, поэтому a - b - c — BinOp, у которого вложенный BinOp слева, а справа одно c. Парсер переиспользует один объект Sub для всех вхождений, поэтому сравнивайте isinstance(node.op, ast.Sub), а не node.op == ast.Sub().
Примеры
import ast
n = ast.parse('a - b - c', mode='eval').body
print(type(n.op).__name__, type(n.left).__name__, n.right.id) # → Sub BinOp c
print(type(ast.parse('-x', mode='eval').body.op).__name__) # → USub
import ast
a = ast.parse('x - y', mode='eval').body.op
b = ast.parse('p - q', mode='eval').body.op
print(a is b, a == ast.Sub(), isinstance(a, ast.Sub)) # → True False True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности