我正在编写像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__
是什么意思?
答案 0 :(得分:3)
>>> help(float.__pos__)
Help on wrapper_descriptor:
__pos__(...)
x.__pos__() <==> +x
这是“一元加”运算符,当您使用+x
浮点数x
时调用它。它基本上对浮点数没有任何作用,正如你已经发现的那样;-)但是,你可以定义一个子类,它可以用它做一些非常重要的事情。这就是它存在的原因。
答案 1 :(得分:2)
__pos__
方法定义了一元+运算符对任何对象的影响。
正如蒂姆·彼得斯所提到的,它对花车没有影响。
请参阅What's the purpose of the + (pos) unary operator in Python?以获取用于执行某些操作的示例。
答案 2 :(得分:1)
Python有一个一元否定运算符来否定数字,因为你可能很清楚:
>>> x = 5
>>> print(-x)
-5
>>> x = -5
>>> print(-x)
5
说你正在制作一个数字列表。如果你使用+
作为前缀,那么它可能会更加一致,因此Python也有一元+
运算符:
>>> numbers = [-3, -2, -1, 0, +1, +2, +3]
当你在一个数字上使用一元+
运算符时,你是对的,它没有做任何事情;它只是为了保持一致。
现在,当您考虑使用Python时,您可以覆盖类型上的运算符,当然您需要__neg__
来否定该类型的实例。 Python刚刚决定保持一致__pos__
而不是否定该类型的实例。与覆盖这些运算符的所有其他类型一样,float
遵循此协议,而float
的{{1}}实现只是标识函数。