2.8.1 简介
本章将涵盖一下技术:
- Python-C-Api
- Ctypes
- SWIG (简化封装器和接口生成器)
- Cython
这四种技术可能是最知名的,其中Cython可能是最高级的,并且你应该最优先使用它。其他的技术也很重要,如果你想要从不同点角度理解封装问题。之前提到过,还有其他的替代技术,但是,理解了以上这些基础的,你就可以评估你选择的技术是否满足你的需求。
在评估技术时,下列标准会有帮助:
- 需要额外的库吗?
- 代码可以自动生成?
- 是否需要编译?
- 与Numpy数组交互是否有良好的支持?
- 是否支持C++?
在你动手前,应该先考虑一下使用情景。在于原生代码交互时,通常来自于两个应用场景:
- 需要利用C/C++中现存的代码,或者是因为它已经存在,或者是因为它更快。
- Python代码太慢,将内部循环变成原生代码
每个技术都使用来自math.h的cos
函数的封装来进行演示。尽管这是一个无聊例子,但是它确实给我们很好的演示了封装方法的基础,因为每个技术也包含了一定程度Numpy支持,这也用计算一些数组来计算consine的例子来演示。
最后,两个小警示:
- 所有这些方法在Python解释器中都可能崩溃(细分错误),因为在C代码中的错误。
- 所有的例子都在Linux中完成,他们应该在其他操作系统中也可用。
- 在大多数例子中,你都会需要C编译器。