令我感到惊讶的是 abs
适用于 numpy 数组但不适用于列表。这是为什么?
import numpy as np
abs(np.array((1,-2)))
array([1, 2])
abs([1,-1])
TypeError: bad operand type for abs(): 'list'
此外,sum
等内置函数也适用于 numpy 数组。我猜是因为numpy数组支持__getitem__
?但是在 abs
的情况下,如果它依赖于 __getitem__
它应该也适用于列表,但它没有。
最佳答案
那是因为 numpy.ndarray
实现了 __abs__(self)
方法。只需为您自己的类提供它,abs()
就会神奇地工作。对于非内置类型,您也可以在事后提供此功能。例如
class A:
"A class without __abs__ defined"
def __init__(self, v):
self.v = v
def A_abs(a):
"An 'extension' method that will be added to `A`"
return abs(a.v)
# Make abs() work with an instance of A
A.__abs__ = A_abs
但是,这不适用于内置类型,例如 list
或 dict
。
关于python - 为什么像 abs 这样的内置函数适用于 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953127/