为什么1+++2等于3?

32

Python如何求解表达式1+++2

无论我在中间加多少个+,它总是输出3作为答案。请问有人能解释这种行为吗?

而对于1--2,它输出3,而对于1---2,它输出-1


那是否意味着Python中没有递增运算符? - udpsunil
2
在Python中增加一个变量i的值:i += 1 - Greg Hewgill
6
-1:这个问题对 ++ 和 -- 做了很多假设;这些假设在 http://www.python.org/doc/2.5.2/ref/expressions.html 中都有直接的答案。 - S.Lott
6个回答

63

你的表达式与以下相同:

1+(+(+2))

任何数字表达式前面都可以加上 - 使其变成负数,或者加上 + 什么也不做(为了对称性而提供的选项)。带有负号的:

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

并且

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

我看到您澄清了问题,说您来自C语言背景。在Python中,没有像C语言中的++--这样的增量运算符,这可能是导致您困惑的原因。要在Python中递增或递减一个变量ij,请使用以下方式:

i += 1
j -= 1

3
顺便说一下:这是 Python 创作者的设计决策。它确实禁止编写类似 i+++j 这样的不确定代码。 - Boldewyn

15

额外的 + 不是增量操作符(例如在 C++ 中的 ++a 或 a++)。它们只是表示这个数字是正数。

没有这样的 ++ 操作符。不过有一元的 + 和一元的 - 操作符。一元的 + 操作符对其参数没有影响。一元的 - 操作符将其运算数取反或乘以 -1。

+1

-> 1

++1

-> 1

这与+(+(1))相同。

   1+++2
因为它与 1 + (+(+(2)) 相同。 同样,你可以使用 --1 表示 -(-1),也就是 +1。
  --1

为保证完整性,不存在 * 一元运算符。因此 *1 是错误的。但是有一个 ** 运算符,表示幂运算,它需要两个参数。

 2**3

-> 8


4

1+(+(+2)) = 3

1 - (-2) = 3

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


4
尝试使用一元加和一元减
一元减运算符返回其数值参数的否定值。 一元加运算符返回其数值参数不变。
>>> +2
2
>>> ++2
2
>>> +++2
2
>>> -2
-2
>>> --2
2
>>> ---2
-2
>>> 1+(++2)
3

但是我得到的结果是1+++++++++++++2的3。 - udpsunil
1
没问题:1+(+(+(+(+(+(+(+(+(+(+(+2)))))))))))) 12个“+”是一元运算符-请看Greg Hewgill的回答。 - gimel

1
将其视为1 + (+1 * (+1 * 2))。第一个+是运算符,后面的加号是第二个操作数的符号(= 2)。
就像1---2与1 - -(-(2))或1- (-1 * (-1 * (2))相同。

1

我认为它被解析为第一个加号作为二元操作(加法),其余的作为一元操作(变成正数)。

 1 + (+(+2))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接