C++如何调用python函数
时间: 2023-10-07 15:05:19 浏览: 124
在C语言中调用Python函数,需要使用Python的C语言API。以下是一个简单的示例:
1. 在C代码中包含Python头文件:
```c
#include <Python.h>
```
2. 初始化Python解释器:
```c
Py_Initialize();
```
3. 加载Python模块:
```c
PyObject *pModule = PyImport_ImportModule("module_name");
```
4. 获取Python函数:
```c
PyObject *pFunc = PyObject_GetAttrString(pModule, "function_name");
```
5. 定义函数参数:
```c
PyObject *pArgs = PyTuple_New(number_of_arguments);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(arg1));
PyTuple_SetItem(pArgs, 1, PyLong_FromLong(arg2));
// 添加更多参数
```
6. 调用Python函数:
```c
PyObject *pResult = PyObject_CallObject(pFunc, pArgs);
```
7. 处理函数返回值:
```c
long result = PyLong_AsLong(pResult);
```
8. 释放内存:
```c
Py_DECREF(pModule);
Py_DECREF(pFunc);
Py_DECREF(pArgs);
Py_DECREF(pResult);
```
完整的代码示例:
```c
#include <Python.h>
int main(int argc, char *argv[])
{
Py_Initialize();
// 加载Python模块
PyObject *pModule = PyImport_ImportModule("example_module");
// 获取Python函数
PyObject *pFunc = PyObject_GetAttrString(pModule, "example_function");
// 定义函数参数
PyObject *pArgs = PyTuple_New(2);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(10));
PyTuple_SetItem(pArgs, 1, PyLong_FromLong(20));
// 调用Python函数
PyObject *pResult = PyObject_CallObject(pFunc, pArgs);
// 处理函数返回值
long result = PyLong_AsLong(pResult);
printf("Result: %ld\n", result);
// 释放内存
Py_DECREF(pModule);
Py_DECREF(pFunc);
Py_DECREF(pArgs);
Py_DECREF(pResult);
Py_Finalize();
return 0;
}
```
阅读全文