当使用 C 语言编写的库和模块时,Python 提供了一种称为 C 扩展的机制,允许在 Python 中调用和使用这些 C 代码。下面是一个简单的示例,展示了如何使用 C 扩展在 Python 中调用 C 语言编写的函数:
- 创建一个名为
example.c的 C 文件,内容如下:
#include <Python.h>
// C 语言函数,将两个整数相加
int add_numbers(int a, int b) {
return a + b;
}
// Python 对应的封装函数
static PyObject* py_add_numbers(PyObject* self, PyObject* args) {
int a, b;
// 解析传入的参数
if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
return NULL;
}
// 调用 C 函数
int result = add_numbers(a, b);
// 返回结果作为 Python 对象
return PyLong_FromLong(result);
}
// 模块的方法列表
static PyMethodDef ExampleMethods[] = {
{"add_numbers", py_add_numbers, METH_VARARGS, "Add two numbers."},
{NULL, NULL, 0, NULL} // 结束标记
};
// 模块定义
static struct PyModuleDef examplemodule = {
PyModuleDef_HEAD_INIT,
"example", // 模块名称
NULL, // 模块文档
-1, // 模块状态
ExampleMethods // 模块方法列表
};
// 初始化模块函数
PyMODINIT_FUNC PyInit_example(void) {
return PyModule_Create(&examplemodule);
}
- 创建一个名为
setup.py的 Python 脚本,内容如下:
from distutils.core import setup, Extension
# 创建 C 扩展模块
example_module = Extension('example', sources=['example.c'])
# 设置模块的元数据
setup(
name='example',
version='1.0',
description='Example C Extension',
ext_modules=[example_module]
)
- 执行以下命令来构建和安装 C 扩展模块:
python setup.py build
python setup.py install
这将构建并安装名为 example 的 C 扩展模块。
- 在 Python 中使用 C 扩展模块:
import example
result = example.add_numbers(10, 5)
print(result) # 输出:15
在上述示例中,我们通过编写 C 代码并使用 distutils 模块来构建和安装 C 扩展模块。然后在 Python 中导入该模块,并调用其中的 C 函数。
这只是一个简单的示例,演示了 Python 如何使用 C 扩展与 C 语言编写的库和模块进行交互。在实际中,通常需要更复杂的 C 代码和更详细的扩展模块配置。