Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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