float .__ pos__是什么意思?

时间:2013-11-08 02:32:19

标签: python

我正在编写像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__是什么意思?

3 个答案:

答案 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}}实现只是标识函数。