【问题标题】:Why does Python treat consecutive repetitions of the addition operator as just a single repetition?为什么 Python 将加法运算符的连续重复视为一次重复?
【发布时间】:2020-08-04 03:21:04
【问题描述】:

今天我注意到 Python 解释器将加法运算符的连续重复视为运算符的一次重复。例如:

>>> 1 ++ 2
3

当这样的事件发生时不简单地引发错误有什么用?我发现一个打字的程序员更可信

>>> 1 -+-++ 2

他们只是疯了;这不太可能故意出现在代码中。

写这样的东西似乎没有任何意义

>>> +-1

只返回-1,证明该操作不会使数字为正数,而是简单地执行恒等操作。

【问题讨论】:

  • ...+(1) == 1-(1) == -1
  • stackoverflow.com/q/16819023/1424875 可能会有一些很好的讨论。一个可能的答案是一元 + 和一元 - 都是为了一致性/对称性而定义的,另外一个好处是一元 + 可以在适合某些类的情况下被覆盖。
  • 随后发现的任何多余的运算符都将被视为下一个值的unary operator - 实际上还有一个反运算符~,因此表达式-+~1 也是有效的。它们由底层运算符方法__pos__ 支持+__neg__ 用于-__invert__ 用于~

标签: python operators addition


【解决方案1】:

因为它超载了。它是加法运算符(由__add__ 方法实现),也是unary 正运算符(由__pos__ 实现)。比较一下-,它是减法运算符(__sub__)和一元负运算符(__neg__)。

因此,例如,1 ++ 2 被解析为 1 + (+ 2),对于整数,它简化为 1 + 2,但对于其他类型则不一定。见What's the purpose of the + (pos) unary operator in Python?

【讨论】:

    【解决方案2】:

    这是数学的。虽然对普通人来说没有意义,但对于 python +(+1) 和 -(-1) 是 +,+(-1) 和 -(+1) 是 -。 回到这个问题,不只是 python 这样做。是数学思维。这就像告诉计算机一个叫string的变量等于29。听起来不对,但计算机认为是正常的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 2017-03-16
      • 2015-06-25
      • 2015-08-27
      • 2022-01-14
      • 1970-01-01
      • 2013-12-25
      • 2011-05-09
      相关资源
      最近更新 更多