2.8.1 简介

本章将涵盖一下技术:

  • Python-C-Api
  • Ctypes
  • SWIG (简化封装器和接口生成器)
  • Cython

这四种技术可能是最知名的,其中Cython可能是最高级的,并且你应该最优先使用它。其他的技术也很重要,如果你想要从不同点角度理解封装问题。之前提到过,还有其他的替代技术,但是,理解了以上这些基础的,你就可以评估你选择的技术是否满足你的需求。

在评估技术时,下列标准会有帮助:

  • 需要额外的库吗?
  • 代码可以自动生成?
  • 是否需要编译?
  • 与Numpy数组交互是否有良好的支持?
  • 是否支持C++?

在你动手前,应该先考虑一下使用情景。在于原生代码交互时,通常来自于两个应用场景:

  • 需要利用C/C++中现存的代码,或者是因为它已经存在,或者是因为它更快。
  • Python代码太慢,将内部循环变成原生代码

每个技术都使用来自math.h的cos函数的封装来进行演示。尽管这是一个无聊例子,但是它确实给我们很好的演示了封装方法的基础,因为每个技术也包含了一定程度Numpy支持,这也用计算一些数组来计算consine的例子来演示。

最后,两个小警示:

  • 所有这些方法在Python解释器中都可能崩溃(细分错误),因为在C代码中的错误。
  • 所有的例子都在Linux中完成,他们应该在其他操作系统中也可用。
  • 在大多数例子中,你都会需要C编译器。