2016-04-16 73 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模塊中的東西在運營商面前並不是毫無意義的。 –