编写一个C++的扩展模块,其中包含Python的头文件和函数调用
时间: 2024-05-14 18:17:16 浏览: 103
好的,以下是一个简单的例子,演示如何编写一个C扩展模块,其中包含Python的头文件和函数调用:
```c
#include <Python.h>
// 定义一个函数,用于Python调用
static PyObject* my_function(PyObject* self, PyObject* args)
{
char* message = "Hello from C!";
return Py_BuildValue("s", message);
}
// 定义模块中的函数列表
static PyMethodDef my_module_methods[] = {
{"my_function", my_function, METH_VARARGS, "Return a string from C."},
{NULL, NULL, 0, NULL}
};
// 定义模块结构体
static struct PyModuleDef my_module = {
PyModuleDef_HEAD_INIT,
"my_module",
"Example module that provides a function written in C.",
-1,
my_module_methods
};
// 模块初始化函数
PyMODINIT_FUNC PyInit_my_module(void)
{
return PyModule_Create(&my_module);
}
```
在这个例子中,我们定义了一个C函数 `my_function`,该函数返回一个字符串。我们还定义了一个函数列表 `my_module_methods`,其中包含我们要向Python暴露的函数。最后,我们定义了一个模块结构体 `my_module`,该结构体包含模块的信息和函数列表。最后,我们定义了一个模块初始化函数 `PyInit_my_module`,该函数创建并返回Python模块对象。
在编译和安装模块之后,我们可以在Python中使用以下代码来调用我们的C函数:
```python
import my_module
# 调用C函数
result = my_module.my_function()
print(result)
```
阅读全文