加号在Python中的变量前面做了什么?

时间:2012-05-25 03:38:50

标签: python decimal unary-operator

我必须维护的项目中有以下一些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 call一元加运算符,它“使其数字参数保持不变”。它可以安全地移除吗?

(顺便提一下,代码是我前一段时间编写的,希望我已经吸取了教训 - 如果测试存在,或者如果在评论中澄清使用十进制加一小数,那就不是问题。 )

2 个答案:

答案 0 :(得分:18)

加号的作用取决于该表达式的结果所定义的内容(调用该对象的__pos__()方法)。在这种情况下,它是一个Decimal对象,一元加号相当于调用plus()方法。基本上,它用于应用当前上下文(精度,舍入等)而不更改数字的符号。在其他地方寻找setcontext()localcontext()来电,了解上下文是什么。有关详细信息,请see here

一元加号不经常使用,所以这种用法不熟悉也就不足为奇了。我认为decimal模块是唯一使用它的标准模块。

答案 1 :(得分:2)

当我错误地认为Python必须支持C increment(++)运算符时,我遇到了同样的问题。它没有!相反,它应用加号运算符(+)两次!哪个什么都没做,我很快就学会了。但是,因为“++ n”看起来有效......没有被标记为语法错误......我为自己制造了一个可怕的错误。

因此,除非你重新定义它的作用,否则一元+实际上什么都不做。一元 - 从正面变为负面,反之亦然,这就是为什么“ - n”也没有被标记为语法错误,但它也没有做任何事情。