为什么i ++++++++我在python中有效?

时间:2010-05-21 16:45:04

标签: python

我“意外地”遇到了这种奇怪但有效的语法

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 个答案:

答案 0 :(得分:28)

由于Python没有C风格的++或 - 运算符,因此我们可以假设您在左边的值上否定或假设(?)。

E.g。你期望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 Grammar Specification开始,您会看到以下行:

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

这意味着表达式中的因子可以是+-~之前的因子。即它是递归的,所以如果5是一个因素(因为因子 - > power-> NUMBER),那么-5是一个因素,因此--5和{{1 }}

答案 1 :(得分:5)

加号被认为是最右边i变量的一元运算符,如+( - 3)= -3或+(+(+ 3)))= 3。只是最左边的符号(加号或减号)被解析为二进制,因此i +++ i = i +(+(+ i)),在您的示例中转换为i + i = 3 + 3 = 6。

其他表达方式遵循相同的原则。

答案 2 :(得分:5)

应该阅读

print i + (+ (+i) )

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

+i

和(不幸的)

++i

因此是有效的陈述。