📅  最后修改于: 2023-12-03 15:29:55.606000             🧑  作者: Mango
本文将介绍如何使用C++调用Python函数,主要分为以下两种方法:
在C++中,我们可以使用Python的解释器API来调用Python函数。步骤如下:
#include <Python.h>
Py_Initialize();
PyObject* moduleName = PyUnicode_FromString("example");
PyObject* pModule = PyImport_Import(moduleName);
PyObject* pFunc = PyObject_GetAttrString(pModule, "example_function");
其中,"example"为模块名,"example_function"为函数名。
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(42));
PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
其中,我们传入的参数为整数42。如果传入的参数是字符串,则需要使用以下代码:
PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("hello"));
long result = PyLong_AsLong(pResult);
如果返回的值是字符串,则需要使用以下代码:
std::string result = PyUnicode_AsUTF8(pResult);
Py_DECREF(pArgs);
Py_DECREF(pFunc);
Py_DECREF(pModule);
Py_XDECREF(moduleName);
Py_Finalize();
完整代码如下:
#include <Python.h>
#include <iostream>
int main()
{
Py_Initialize();
PyObject* moduleName = PyUnicode_FromString("example");
PyObject* pModule = PyImport_Import(moduleName);
PyObject* pFunc = PyObject_GetAttrString(pModule, "example_function");
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(42));
PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
long result = PyLong_AsLong(pResult);
std::cout << "Result: " << result << std::endl;
Py_DECREF(pArgs);
Py_DECREF(pFunc);
Py_DECREF(pModule);
Py_XDECREF(moduleName);
Py_Finalize();
return 0;
}
在C++中,我们也可以使用Python脚本文件来调用Python函数。步骤如下:
#include <Python.h>
Py_Initialize();
FILE* file = fopen("example.py", "r");
PyRun_SimpleFile(file, "example.py");
fclose(file);
其中,"example.py"为Python脚本文件名。
PyObject* pModule = PyImport_ImportModule("example");
PyObject* pFunc = PyObject_GetAttrString(pModule, "example_function");
其中,"example"为模块名,"example_function"为函数名。
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(42));
PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
long result = PyLong_AsLong(pResult);
Py_DECREF(pArgs);
Py_DECREF(pResult);
Py_DECREF(pFunc);
Py_DECREF(pModule);
Py_Finalize();
完整代码如下:
#include <Python.h>
#include <iostream>
int main()
{
Py_Initialize();
FILE* file = fopen("example.py", "r");
PyRun_SimpleFile(file, "example.py");
fclose(file);
PyObject* pModule = PyImport_ImportModule("example");
PyObject* pFunc = PyObject_GetAttrString(pModule, "example_function");
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(42));
PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
long result = PyLong_AsLong(pResult);
std::cout << "Result: " << result << std::endl;
Py_DECREF(pArgs);
Py_DECREF(pResult);
Py_DECREF(pFunc);
Py_DECREF(pModule);
Py_Finalize();
return 0;
}
本文介绍了两种方法使用C++调用Python函数,主要分为使用Python解释器API和使用Python脚本文件。具体方法根据实际需求选择即可。