Python:abs和operator.abs有什么区别?

4
在Python中,abs(a)和operator.abs(a)有什么区别?
它们是完全相同的,并且它们的功能也相同。如果它们是完全相同的,那么为什么会有两个做同样事情的不同函数呢?
如果其中一个具有特定功能,请进行说明。
2个回答

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)

(注意,如果C模块本身无法加载,则使用上述Python实现。)
它完全是为了补充其他(数学)运算符而存在的;例如,如果您想在该模块上进行动态运算符查找,则不必特别处理abs()

4
没有任何区别。你可能想在像 `itertools.accumulate` 这样的函数中使用 `operator.abs`,就像你用 `operator.add` 代替 `+` 一样。但是性能确实有所不同。
例如,使用 `operator.add` 比使用 `+` 快两倍(Beazly)。

3
在性能方面比较absadd有点无意义。例如,operator.absabs之间没有性能差异(除了对operator.abs进行属性查找之外,可以通过绑定到本地名称来避免)。 - Martijn Pieters
1
@MartijnPieters 同意。这就是我使用 operator.add 作为示例的原因。 - C Panda
@MartijnPieters 我只是想说,在运算符面前,operator模块中的东西并不是毫无意义的。 - C Panda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接