我必须维护的项目中有以下一些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它一元加运算符,它“使其数字参数保持不变”。它可以安全地移除吗?
(顺便提一下,代码是我前一段时间编写的,希望我已经吸取了教训 - 如果测试存在,或者如果在评论中澄清使用十进制加一小数,那就不是问题。 )
答案 0 :(得分:18)
加号的作用取决于该表达式的结果所定义的内容(调用该对象的__pos__()
方法)。在这种情况下,它是一个Decimal
对象,一元加号相当于调用plus()
方法。基本上,它用于应用当前上下文(精度,舍入等)而不更改数字的符号。在其他地方寻找setcontext()
或localcontext()
来电,了解上下文是什么。有关详细信息,请see here。
一元加号不经常使用,所以这种用法不熟悉也就不足为奇了。我认为decimal
模块是唯一使用它的标准模块。
答案 1 :(得分:2)
当我错误地认为Python必须支持C increment(++)运算符时,我遇到了同样的问题。它没有!相反,它应用加号运算符(+)两次!哪个什么都没做,我很快就学会了。但是,因为“++ n”看起来有效......没有被标记为语法错误......我为自己制造了一个可怕的错误。
因此,除非你重新定义它的作用,否则一元+实际上什么都不做。一元 - 从正面变为负面,反之亦然,这就是为什么“ - n”也没有被标记为语法错误,但它也没有做任何事情。