1

我正在编写一个函数计算,例如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__呢?

4

3 回答 3

4
>>> help(float.__pos__)
Help on wrapper_descriptor:

__pos__(...)
    x.__pos__() <==> +x

+x它是“一元加号”运算符,在使用x浮点数时调用。正如您所发现的,它基本上对浮点数没有任何作用;-) 但是,您可以定义一个子类,用它做一些不平凡的事情。这就是它在那里的原因。

于 2013-11-08T02:35:58.577 回答
2

__pos__方法定义了一元 + 运算符对任何对象的效果。

正如蒂姆彼得斯所说,它对浮动没有影响。

请参阅Python 中 + (pos) 一元运算符的目的是什么?例如,它用于做某事。

于 2013-11-08T02:37:22.317 回答
1

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__只是标识函数。

于 2013-11-08T02:37:23.800 回答