代码之家  ›  专栏  ›  技术社区  ›  Mr. W

numpy.divide是函数、类还是其他什么?

  •  0
  • Mr. W  · 技术社区  · 5 月前

    在这段代码中:

    import numpy as np
    
    a = np.array([1,2,3])
    b = np.array([2,3,4])
    
    c = np.divide(a,b)
    d = np.divide.outer(a,b)
    e = np.outer(a,b)
    
    print(f"{c=}\n{d=}\n{e=}")
    

    看来是 numpy.divide 包含 outer 与此同时 numpy.divide 是一种功能。

    我真的很困惑为什么 numpy.divide 表现得像两者 class (因为它可能包含一些东西)和 function (因为它是可调用的)。

    print(type(np.divide)) 退货 <class 'numpy.ufunc'> 但为什么 ufunc 会有这种效果吗?

    我的问题是:为什么 np.divide 是可调用的,同时有属于的函数 np.divide ? sys.stderr.write 与以下情况不同 sys.stderr 不可调用。

    1 回复  |  直到 5 月前
        1
  •  2
  •   Grismar    5 月前

    一个简单的方法来回答这类问题:

    import numpy as np
    
    print(type(np.divide))
    

    结果:

    <class 'numpy.ufunc'>
    

    你如何调用一个类,或者更确切地说,它的一个实例? If a class has __call__ , it instances can be called ,而这个 ufunc 可调用:

    print(type(np.divide.__call__))
    

    结果:

    <class 'method-wrapper'>
    

    这不仅仅是“使用了类似的符号”——实例 可调用,与函数没有什么不同。一个常规的Python函数只是函数类的一个实例:

    def fun():
        ...
    
    
    print(type(fun))
    print(type(fun.__call__))
    

    结果:

    <class 'function'>
    <class 'method-wrapper'>
    

    所以, numpy.divide 既是函数又是对象,对象是类的实例。如果某物具有该类型 class 'something' ,它本身不是一个类,它是该类的一个实例,一个对象。