Что делает знак плюса перед переменной в Python?

в проекте, который я должен поддерживать, есть следующий бит кода Python:

# If the `factor` decimal is given, compute new price and a delta
factor = +factor.quantize(TWOPLACES)
new_price = +Decimal(old_price * factor).quantize(TWOPLACES)
delta = new_price - old_price

вопрос здесь заключается в цели + перед переменной.

Python docs вызов это унарный плюс оператор, который "дает свой числовой аргумент без изменений". Можно ли его безопасно удалить?

(кстати, код был написан мной некоторое время назад, надеюсь, я выучил урок-это не будет вопросом, если тесты существовал, или если использование унарного плюс на десятичном было разъяснено в комментариях.)

2 ответов


что делает этот знак плюса, зависит от того, что он определяется результатом этого выражения (этот объект __pos__() метод называется). В этом случае это Decimal объект, а унарный плюс эквивалентен вызову plus() метод. В принципе, он используется для применения текущего контекста (точность, округление и т. д.) без изменения знака числа. Ищите setcontext() или localcontext() позвоните в другое место, чтобы узнать, что такое контекст. Для получения дополнительной информации посмотреть вот!--8-->.

унарный плюс используется не очень часто, поэтому неудивительно, что это использование незнакомо. Я думаю, что decimal module-единственный стандартный модуль, который его использует.


Я столкнулся с этой же проблемой, когда ошибочно предположил, что Python должен поддерживать оператор c increment ( ++ ); это не так! Вместо этого он применяет оператор знака плюс ( + ) дважды! Что ничего не делает дважды, как я вскоре узнал. Однако, потому что "++n " выглядел допустимым... не помечено как синтаксическая ошибка... Я создал ужасного жука для себя.

поэтому, если вы не переопределите то, что он делает, унарный + фактически ничего не делает. Унарный-меняется от положительного к отрицательному и наоборот, поэтому " --n" также не помечен как синтаксическая ошибка, но он также ничего не делает.