2016-04-16 45 views
3

在蟒蛇之间有什么区别:他们是很相同的,他们的工作都的Python:有什么区别 - ABS和operator.abs

abs(a)operator.abs(a)

。如果他们是一样的,那么为什么两个独立的功能做同样的事情呢?

如果其中任何一个有某些特定的功能 - 请做解释。

回答

7

没有区别。文档甚至是这么说的:

>>> import operator 
>>> print(operator.abs.__doc__) 
abs(a) -- Same as abs(a). 

它是作为一个包装只是这样的文件可以被更新:

from builtins import abs as _abs 

# ... 

def abs(a): 
    "Same as abs(a)." 
    return _abs(a) 

(注意,上面的Python实现只有在C module itself不能使用被加载)。

它有纯粹补充其他(数学)运算符;例如如果您想在该模块上进行动态运算符查找,则不需要特殊情况abs()

4

没有什么区别。您可能想要使用operator.abs,其功能如itertools.accumulate,就像您使用operator.add+一样。虽然有不同的表现。

例如使用operator.add是快两倍+Beazly)。

+3

在性能上比较'abs'和'add'是没有意义的。例如'operator.abs'和'abs'之间没有性能差别(除了'operator.abs'上的属性查找,可以通过绑定到本地名称来避免)。 –

+0

@MartijnPieters同意。这就是为什么我使用'operator.add'作为例子。 –

+0

@MartijnPieters我只是想表明,在operator模块中的东西在运营商面前并不是毫无意义的。 –