Что делает знак плюс перед переменной в 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 называют это унарным оператором плюс, который "возвращает свой числовой аргумент без изменений". Это может быть безопасно удалено тогда?

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам