为啥 1+++2 = 3?

Posted

技术标签:

【中文标题】为啥 1+++2 = 3?【英文标题】: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回答的事情 【参考方案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)) 一样

【讨论】:

以上是关于为啥 1+++2 = 3?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 [1,2,3] 在 Javascript 中不等于自身? [复制]

为啥“-3 >> 1”不会产生与“-3 / 2”相同的结果? [复制]

为啥“123”.split('') 不等于 [1, 2, 3].join('').split('') [重复]

为啥 torch.FloatTensor([[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]]]) 的大小是 [2,2, 3]? [关闭]

为啥 [1,2] + [3,4] = "1,23,4" 在 JavaScript 中?

为啥是“纱线 2”纱线 3.0.1?