为何在Python中i++++++++i是有效的?

16 投票
3 回答
769 浏览
提问于 2025-04-15 23:00

我“偶然”发现了这种奇怪但有效的语法

i=3
print i+++i #outputs 6
print i+++++i #outputs 6
print i+-+i #outputs 0
print i+--+i #outputs 6 

(对于每两个负号,它输出6,否则输出0,这是什么原因呢?)

这个有什么用吗?

更新(别误会,我很喜欢Python): Python的一个原则是 应该有一种——最好只有一种——明显的方法来做这件事。看起来有无数种方法可以实现i+1。

3 个回答

5

这里的加号被认为是单目运算符,作用于最右边的 i 变量。比如说,+(-3) 就等于 -3,或者 +(+(+3)) 也等于 3。只有最左边的符号(加号或减号)被当作双目运算符来处理,所以 i+++i 实际上是 i + (+(+i)),这就变成了 i + i = 3 + 3 = 6,正如你例子中所示。

其他的表达式也是遵循同样的原则。

5

应该这样写:

print i + (+ (+i) )

也就是说,第一个符号是加法运算符,其他的都是中缀符号。

+i

而且(不幸的是)

++i

因此这些都是有效的语句。

28

因为Python没有像C语言那样的++或--操作符,所以我们只能假设你是在对左边的值进行正负操作。

比如,你会期待 i + +5 的结果是什么呢?

i=3
print i + +(+i) #outputs 6
print i + +(+(+(+i))) #outputs 6
print i + -(+i) #outputs 0
print i + -(-(+i)) #outputs 6 

值得注意的是,在Python语法规范中,你会看到这样一行:

factor: ('+'|'-'|'~') factor | power

这意味着在一个表达式中,因子可以是一个前面带有+-~的因子。也就是说,这个规则是递归的,所以如果5是一个因子(因为因子->幂->数字),那么-5也是一个因子,--5--------5也是。

撰写回答