【问题标题】:What does a plus sign do in front of a variable in Python?Python中变量前面的加号有什么作用?
【发布时间】:2012-05-25 03:38:49
【问题描述】:

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

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

【问题讨论】:

  • 删除后会发生什么?
  • 没有什么是显而易见的,但由于它涉及敏感的数字信息(产品定价),因此最好确定一下。唉,缺少相关的测试。
  • 我确信这样做是有目的的。我不知道答案,但我很好奇是否有直接的、明显的差异。
  • @CoreyOgburn,说得好。可以通过尝试来回答的问题相对经常出现在这里。在这种情况下,价格处理的适当测试也将消除不确定性。 (不过,我想我会把它留作参考。官方文档说一元加号保持参数不变,但小数并非如此。)

标签: python decimal unary-operator


【解决方案1】:

加号的作用取决于该表达式的结果(调用该对象的__pos__() 方法)定义的作用。在这种情况下,它是一个Decimal 对象,一元加号相当于调用plus() 方法。基本上,它用于在不更改数字符号的情况下应用当前上下文(精度、舍入等)。在别处寻找setcontext()localcontext() 调用以查看上下文是什么。欲了解更多信息,see here

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

【讨论】:

  • 谢谢!在模块的开头确实存在一个setcontext(Context(rounding=ROUND_UP)) 调用。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多