问询:Numpy从Python调用C函数的实现逻辑及源码位置
Numpy Python调用C函数的机制及源码定位疑问
出于效率考量,Numpy采用C语言实现核心功能。我想搞清楚Numpy是如何从Python层面调用np.array这类C实现的函数,以及源码中负责这一调用流程的具体部分。
我已经尝试手动追踪源码:
- 查看了
numpy/_core/src/multiarray目录下的multiarraymodule.c文件,重点关注了PyMethodDef array_module_methods[]结构,以此了解C模块导入Python后对外暴露的功能;同时也关注了模块初始化定义:
PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "_multiarray_umath", NULL, -1, array_module_methods, NULL, NULL, NULL, NULL };
- 发现
_multiarray_umath这个C扩展模块被导入到numpy/_core/multiarray.py中,该Python文件里用装饰器定义了empty_like函数:
@array_function_from_c_func_and_dispatcher(_multiarray_umath.empty_like) def empty_like( prototype, dtype=None, order=None, subok=None, shape=None, *, device=None): # 函数体内包含大量文档注释和示例说明 return (prototype,)
我认为这个带装饰器的Python函数就是empty_like()对应C实现的调用入口,这个判断是否正确?
内容的提问来源于stack exchange,提问作者Humbulani
相关产品推荐
相关产品推荐

