col*_*ang 14 python arrays numpy
我感到惊讶的是,它abs适用于numpy数组,但不适用于列表.这是为什么?
import numpy as np
abs(np.array((1,-2)))
array([1, 2])
abs([1,-1])
TypeError: bad operand type for abs(): 'list'
Run Code Online (Sandbox Code Playgroud)
此外,内置函数sum也适用于numpy数组.我想这是因为numpy数组支持__getitem__?但是abs,如果它依赖于__getitem__它应该也适用于列表,但它没有.
Mic*_*ild 21
那是因为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
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于内置类型,例如list或dict.
abs 功能寻找 __abs__方法。
您还可以像numpy一样实现 __abs__在类中方法,以便Abs可以与它们一起使用。
即
class A(object):
def __abs__(self):
return 8
>>> a= A()
>>> abs(a)
8
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7843 次 |
| 最近记录: |