все Python 3astпонятие
ast.UnaryOp
выражения
Узел унарной операции: op — UAdd, USub, Not или Invert, operand — выражение, к которому она применена.
Синтаксис
ast.UnaryOp(op, operand)
Отрицательное число в исходнике — не Constant: -5 разбирается в UnaryOp(USub, Constant(5)), и анализ, ищущий числа через Constant, теряет знак. ast.literal_eval при этом -5 принимает. Приоритет тоже ловушка: -2 ** 2 — UnaryOp, чей operand — BinOp 2 ** 2, то есть результат -4. Логическое not — тоже UnaryOp, а and/or — уже BoolOp.
Примеры
import ast
n = ast.parse('-5', mode='eval').body
print(type(n).__name__, type(n.op).__name__, n.operand.value) # → UnaryOp USub 5
print(ast.literal_eval('-5')) # → -5
import ast
n = ast.parse('-2 ** 2', mode='eval').body
print(type(n).__name__, type(n.operand).__name__, -2 ** 2) # → UnaryOp BinOp -4
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности