为何在Python中i++++++++i是有效的?
我“偶然”发现了这种奇怪但有效的语法
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
也是。