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

Sys*_*min 16 python

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

i=3
print i+++i #outputs 6
print i+++++i #outputs 6
print i+-+i #outputs 0
print i+--+i #outputs 6 
Run Code Online (Sandbox Code Playgroud)

(对于每一个甚至没有:减号,它输出6其他0,为什么?)

这有用吗?

更新(不要采取错误的方式..我喜欢python):Python的一个原则说应该有一个 - 最好只有一个 - 明显的方法来做到这一点.似乎有无限的方法来做i + 1

das*_*ang 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 
Run Code Online (Sandbox Code Playgroud)

值得注意的是,从Python语法规范中,您将看到以下行:

factor: ('+'|'-'|'~') factor | power
Run Code Online (Sandbox Code Playgroud)

这意味着,在表达式中的一个因素可以是由前面的因子+,-~.即它是递归的,所以如果5是一个因素(因为因子 - >幂 - > NUMBER),那么-5是一个因素,所以是--5--------5.


Spi*_*dey 5

加号被认为是最右边i变量的一元运算符,如+( - 3)= -3或+(+(+ 3)))= 3.只是最左边的符号(加号或减号)被解析为二进制,所以i +++ i = i +(+(+ i)),在你的例子中,它转换为i + i = 3 + 3 = 6.

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


Unc*_*eiv 5

那应该读

print i + (+ (+i) )
Run Code Online (Sandbox Code Playgroud)

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

+i
Run Code Online (Sandbox Code Playgroud)

和(不幸的)

++i
Run Code Online (Sandbox Code Playgroud)

因此是有效的陈述.

  • 我喜欢最后一个.++我是有效的,它只是没有做它在其他语言中做的:) (2认同)