1. 采用 C/C++ 扩展 Python

若您知道如何按 C 编程,向 Python 添加新的内置模块就非常容易。这种 扩展模块 可以做 2 件在 Python 中无法直接完成的事情:可以实现新的内置对象类型,可以调用 C 库函数和系统调用。

为支持扩展,Python API (应用程序程序员接口) 定义了一组函数、宏和变量,提供对 Python 运行时系统大多数方面的访问。Python API 被纳入在 C 源文件中通过包括头 "Python.h" .

扩展模块的编译从属其所谓用法及系统设置;细节在以后章节中给出。

注意

C 扩展接口特定于 CPython,且扩展模块不工作于其它 Python 实现。在很多情况下,避免编写 C 扩展并保留对其它实现的可移植性是可能的。例如,若用例是调用 C 库函数或系统调用,应考虑使用 ctypes 模块或 cffi 库而不是编写自定义 C 代码。这些模块让您编写 Python 代码以接口 C 代码,且在 Python 实现之间更可移植 (相比编写和编译 C 扩展模块)。

1.1. 简单范例

让我们创建扩展模块称为 spam (Monty Python 粉丝喜爱的食物 …) 并假设我们想创建 Python 接口到 C 库函数 system() [ 1 ] 。此函数接受以 Null 结尾的字符串作为自变量,并返回整数。想要从 Python 调用此函数,如下所示:

>>> import spam
>>> status = spam.system("ls -l")