我“意外地”遇到了这种奇怪但有效的语法
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
答案 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
因此是有效的陈述。