все Python 3astпонятие
ast.USub
операторы
Оператор унарного минуса -x в поле op узла UnaryOp.
Синтаксис
ast.USub()
Из-за USub отрицательных литералов в дереве нет: -1 — это UnaryOp(USub, Constant(1)), и проверка isinstance(node, ast.Constant) для -1 ложна. Приоритет у унарного минуса ниже, чем у **: -2 ** 2 равно -4. Сохраняет ли знак ast.unparse — да, но ищущий «отрицательные числа» должен смотреть на пару UnaryOp+USub+Constant.
Примеры
import ast
n = ast.parse('-1', mode='eval').body
print(type(n).__name__, type(n.op).__name__, isinstance(n, ast.Constant)) # → UnaryOp USub False
print(ast.unparse(n)) # → -1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности