本页面介绍了 Python 的 C API,它使开发人员能够用 C 语言编写与 Python 运行时集成的扩展模块。理解 C API 可以帮助开发人员创建高性能的扩展、接口连接外部库以及访问底层系统资源。
有关 Python 对象模型的信息,请参阅对象系统与内存管理。有关解释器状态和线程的详细信息,请参阅运行时与线程管理。
Python C API 包含多个具有不同兼容性保证的层。
来源
Python 扩展模块是一种具有特定结构的已编译共享库。
这是一个最简模块示例:
来源
Python 支持两种模块初始化方法:
PyInit_ 函数的传统方法,所有初始化都在其中进行。
较新的方法(Python 3.5+),提供更好的隔离性。
来源
Python 类型对象定义用户定义类的行为。有两种创建类型的方法:
动态方法(PyType_FromSpec)是使用 Limited API 的扩展所必需的。
来源
类型对象由定义行为的各种组件组成。
自定义类型可以定义方法、数据属性和特性。
来源
Python 使用引用计数进行内存管理。每个对象都有一个引用计数,用于跟踪对它的引用数量。
| 宏 | 目的 |
|---|---|
Py_INCREF(obj) | 增加引用计数。 |
Py_DECREF(obj) | 减少引用计数,并可能释放对象。 |
Py_XINCREF(obj) | Py_INCREF 的安全版本(会检查 NULL)。 |
Py_XDECREF(obj) | Py_DECREF 的安全版本(会检查 NULL)。 |
Py_NewRef(obj) | 返回对象的新引用(Python 3.10+)。 |
Py_XNewRef(obj) | 返回对象的新引用,或 NULL(Python 3.10+)。 |
来源
将 Python 参数转换为 C 值需要显式解析。
| 格式 | C 类型 | Python 类型 |
|---|---|---|
i | int | int |
l | long | int |
f | 浮点数 | 浮点数 |
d | double | 浮点数 |
s | const char* | str |
O | PyObject* | 任意 |
O! | PyObject* | 已检查类型 |
O& | PyObject* | 已转换 |
来源
Argument Clinic 从特殊注释生成参数解析代码。
来源
C API 中的错误处理涉及设置异常并返回错误指示符。
来源
Python 的全局解释器锁 (GIL) 可防止多个线程同时执行 Python 字节码。
对于 CPU 密集型 C 代码,请释放 GIL。
来源
Python 3.13 增加了在不使用 GIL 的情况下运行的实验性支持。
来源
稳定 ABI 确保了跨 Python 版本扩展的二进制兼容性。
使用 Limited API
来源
Python 包含用于测试 C API 的特殊模块。
来源
有关特定主题的更详细信息,请参阅。