python 调用 c函数 numpy 数组_python的库,比如numpy是如何调用C语言实现的代码的?...

Python(此处特指CPython)调用C/C++的方式并不只有一种,在官方的文档中的至少包括两种:使用ctypes调用任意动态库文件,编写使用特定的API编写的的动态库C Extension。C Extension 编写时可以用Cython,Swig(Python),Boost.Python等作为工具。

而就我的认知而言,一般情况下使用较多的主要是自己手写C Extension (我的理解是理论上运行最快,原因是中间没有别的抽象层,多用于高性能库)和Cython(我的理解是最好写,因为是Python语法的超集,多用于基于Python代码快速实现优化)。

numpy的主要实现方式应该是手写的C Extension,同时也支持了Cython和ctypes的使用。

我的推理逻辑如下,在numpy中我们可以发现源代码中有.pxd文件(pxd是Cython的一种文件后缀),ctypes的导入和手写的C Extension。基于此我们可以推断,numpy支持不止一种方案进行Python与C的交互。

进一步研究的话,我们会发现pxd的开头注释是#NumPy static imports for Cython

我的理解是这说明其文件目的是在Cython中静态引用。

而ctypes的使用处则有如下注释While this module is not used unless the user passes in ctypes members, it is eagerly imported from numpy/core/__init__.py.

我猜测,这个实际上应该也并非用于核心功能实现的代码段。

至于这里的跳转到的代码我认为是用于有类型严格要求的代码提示工具而进行的类型声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值