有人可以解释为什么Python解释器(2.7.3)给出以下内容:
>>> 5 -+-+-+ 2
3
Run Code Online (Sandbox Code Playgroud)
这有用吗,出于什么目的?
Ash*_*ary 10
您可以dis在此处使用以查看表达式的实际评估方式:
In [29]: def func():
....: return 5 -+-+-+ 2
....:
In [30]: import dis
In [31]: dis.dis(func)
2 0 LOAD_CONST 1 (5)
3 LOAD_CONST 2 (2)
6 UNARY_POSITIVE
7 UNARY_NEGATIVE
8 UNARY_POSITIVE
9 UNARY_NEGATIVE
10 UNARY_POSITIVE
11 BINARY_SUBTRACT
12 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
所以表达式相当于:
In [32]: 5 - (+(-(+(-(+(2))))))
Out[32]: 3
Run Code Online (Sandbox Code Playgroud)
这等于
5 - (+(-(+(-(+2)))))
Run Code Online (Sandbox Code Playgroud)
除了第一个之外的所有+和 - 都是一元运算符.对于数字,+返回操作数不变.但是,可以使用__pos__您自己的类上的特殊方法覆盖其含义.
使用数字执行此操作是无用的混淆,但如果您使用具有自定义__neg__和/或__pos__操作的类实例,则它可能很有用(如果令人难以置信的混淆).
你可以滥用它来获得类似C的预增量--和++运算符.不要真的这样做.
class IncrementableInteger(object):
def __init__(self, val=0):
self.val = val
def __pos__(self):
class PlusOne:
def __pos__(_self):
self.val += 1
return PlusOne()
def __neg__(self):
class MinusOne:
def __neg__(_self):
self.val -= 1
return MinusOne()
def __str__(self):
return str(self.val)
def __repr__(self):
return repr(self.val)
Run Code Online (Sandbox Code Playgroud)
例:
>>> IncrementableInteger(4)
4
>>> v=_
>>> ++v
>>> v
5
Run Code Online (Sandbox Code Playgroud)