【问题标题】:Why does 1+++2 = 3?为什么 1+++2 = 3?
【发布时间】:2010-10-02 23:28:37
【问题描述】:

Python 如何评估表达式1+++2

有多少+ 介于两者之间,它打印3 作为答案。请任何人解释这种行为

对于1--2,它正在打印3,对于1---2,它正在打印-1

【问题讨论】:

  • 那么这是否意味着python中没有增量运算符?
  • 在python中增加一个变量i:i += 1
  • -1:这个问题对 ++ 和 -- 做出了大量假设;直接在python.org/doc/2.5.2/ref/expressions.html回答的事情

标签: python evaluation operator-precedence


【解决方案1】:

你的表达方式是这样的:

1+(+(+2))

任何数字表达式都可以在- 之前使其为负数,或者+ 不做任何事情(该选项存在对称性)。带负号:

1-(-(2)) = 1-(-2)
         = 1+2
         = 3

1-(-(-2)) = 1-(2)
          = -1

我看到你澄清了你的问题,说你来自 C 背景。在 Python 中,C 中没有像 ++-- 这样的增量运算符,这可能是您困惑的根源。要在 Python 中增加或减少变量 ij,请使用以下样式:

i += 1
j -= 1

【讨论】:

  • 顺便说一句:这是 Python 创建者的设计决定。它应该完全禁止编写像 i+++j 这样的不确定代码。
【解决方案2】:

额外的 + 不是增量符(如 c++ 中的 ++a 或 a++)。他们只是表明这个数字是正数。

没有这样的 ++ 运算符。但是有一个一元 + 运算符和一个一元 - 运算符。一元 + 运算符对其参数没有影响。一元 - 运算符否定其运算符或将其乘以 -1。

+1

-> 1

++1

-> 1

这与 +(+(1)) 相同

   1+++2

-> 3 因为和 1 + (+(+(2)) 一样

同样,您可以使用 --1 来表示 - (-1),即 +1。

  --1

-> 1

为了完整起见,没有 * 一元运算符。所以 *1 是一个错误。但是有一个** 运算符是幂的,它需要 2 个参数。

 2**3

-> 8

【讨论】:

    【解决方案3】:

    1+(+(+2)) = 3

    1 - (-2) = 3

    1 - (-(-2)) = -1

    【讨论】:

      【解决方案4】:

      尝试Unary Plus and Unary minus:

      一元 -(减号)运算符产生其数字参数的否定。

      一元 +(加号)运算符产生其数字参数不变。

      >>> +2
      2
      >>> ++2
      2
      >>> +++2
      2
      >>> -2
      -2
      >>> --2
      2
      >>> ---2
      -2
      >>> 1+(++2)
      3
      

      【讨论】:

      • 但我也得到了 1+++++++++++++2 的结果 3
      • 不出汗:1+(+(+(+(+(+(+(+(+(+(+(+(+2))))))))))) 12 + 是一元的 - 请参阅 Greg Hewgill 的回复。
      【解决方案5】:

      我相信它被解析为,第一个 + 作为二元运算(加法),其余作为一元运算(正数)。

       1 + (+(+2))
      

      【讨论】:

        【解决方案6】:

        认为它是 1 + (+1*(+1*2)))。第一个 + 是运算符,后面的加号是第二个操作数 (= 2) 的符号。

        就像 1---2 与 1 - -(-(2)) 或 1- (-1*(-1*(2)) 一样

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-31
          • 1970-01-01
          • 2017-07-10
          • 2019-01-09
          • 2015-04-07
          • 2015-12-23
          • 2023-01-16
          相关资源
          最近更新 更多