17

在我必须维护的项目中有以下 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 文档称其一元加运算符,“其数值参数不变”。那么它可以安全地删除吗?

(顺便说一句,代码是我前段时间编写的,希望我已经吸取了教训——如果存在测试,或者如果在评论中澄清了对小数使用一元加号,这将不是问题。)

4

2 回答 2

19

该加号的作用取决于该表达式的结果(__pos__()调用该对象的方法)定义的作用。在这种情况下,它是一个Decimal对象,一元加号相当于调用plus()方法。基本上,它用于在不更改数字符号的情况下应用当前上下文(精度、舍入等)。在其他地方查找setcontext()localcontext()调用以查看上下文是什么。有关详细信息,请参阅此处

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

于 2012-05-25T03:46:58.940 回答
2

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

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

于 2016-11-17T19:41:57.813 回答