在C++中使用python的时候,首先需要配置python的环境。
在此,我就不说明如何配置环境了,网络一搜都是配置方法。以下,我介绍下我在C++中是如何调用python的方法。
仅仅作为参考,有问题咱们可以一起交流。
第一步:python中的简单应用函数
test.py
def AdditionFc(a , b):
c = a + b
return c
def SubtractionFc(a , b):
c = a - b
return c
这个python中只包含了两个简单的例子。一个是加法,一个是减法。
现在需要用C++语言调用python中的两个内容。
第一步:配置好python在C++中的环境。
在此省略。。。
第二步:添加python的声明
#include "Python.h"
第二步:初始化python接口
Py_Initialize();
第三步:初始化使用的变量
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
PyObject *pName = NULL;
这部分可以放到后面写,写到这里完全是因为个人习惯的原因。
第四步:初始化python系统文件路径,保证可以访问到 .py文件
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
第五步:调用python文件名。
当前的测试python文件名是test.py
pModule = PyImport_ImportModule("test");
在使用这个函数的时候,只需要写文件的名称就可以了。不用写后缀。
第六步:调用函数
在此,我仅调用一个作为参考,另一个调用方法是一样的。
pFunc = PyObject_GetAttrString(pModule, "AdditionFc");
第七步:给python传参数
PyObject *pArgs = PyTuple_New(2);//函数调用的参数传递均是以元组的形式打包的,2表示参数个数
这句代码的意思是:我要给python这个函数传入两个参数。
如果AdditionFc中只有一个参数时,写1就可以了。这里只介绍函数必须有参数存在的情况,没有参数的情况会在后面章节中介绍的。
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2));
解释:
0:表示序号。第一个参数
i:表示传入的参数类型时int类型
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4));
1:表示序号。第二个参数
第八步:使用C++的python接口调用该函数
PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);
第九步:接收python计算好的返回值
int nResult ;
PyArg_Parse(pReturn, "i", &nResult);//i表示转换成int型变量
在这里,最需要注意的是:PyArg_Parse的最后一个参数,必须加上“&”符号。
第十步:结束python接口初始化
Py_Finalize();
原文:https://blog.csdn.net/qq_32716885/article/details/80651433