我正在编写一个函数计算,例如eval
. 来的时候float.__pos__
,我真的不知道为什么会有这样一个无用的功能。因为:
>>> float.__pos__(-1.0)
-1.0
>>> float.__pos__(1.0)
1.0
而float.__neg__
完全不同:
>>> float.__neg__(1.0)
-1.0
那么 是什么意思float.__pos__
呢?
我正在编写一个函数计算,例如eval
. 来的时候float.__pos__
,我真的不知道为什么会有这样一个无用的功能。因为:
>>> float.__pos__(-1.0)
-1.0
>>> float.__pos__(1.0)
1.0
而float.__neg__
完全不同:
>>> float.__neg__(1.0)
-1.0
那么 是什么意思float.__pos__
呢?
>>> help(float.__pos__)
Help on wrapper_descriptor:
__pos__(...)
x.__pos__() <==> +x
+x
它是“一元加号”运算符,在使用x
浮点数时调用。正如您所发现的,它基本上对浮点数没有任何作用;-) 但是,您可以定义一个子类,用它做一些不平凡的事情。这就是它在那里的原因。
Python 有一个一元否定运算符来否定数字,你可能很清楚:
>>> x = 5
>>> print(-x)
-5
>>> x = -5
>>> print(-x)
5
不过,假设您正在制作一个数字列表。如果在正数前面加上 a 可能会更一致+
,因此 Python 也有一个一元运算+
符:
>>> numbers = [-3, -2, -1, 0, +1, +2, +3]
当您+
在数字上使用一元运算符时,您是对的,它什么都不做;它只是为了保持一致性。
现在,当您考虑在 Python 中可以覆盖类型上的运算符时,当然您需要 a__neg__
来否定该类型的实例。Python 只是决定通过还有一个__pos__
to...not negate 该类型的实例来保持一致。float
,就像所有其他覆盖这些运算符的类型一样,遵循这个协议,并且float
' 的实现__pos__
只是标识函数。