c调用python参数传递_【转】C++中嵌入python程序——参数传递

本文介绍了在C++中嵌入Python程序时如何进行参数传递,包括使用`PyObject_CallMethod`和`PyObject_CallFunction`函数,以及如何处理多个参数、元组和字典类型。同时讲解了不同类型的参数类型说明符,如`s`、`i`、`O`等,帮助创建灵活的C++/Python混合程序。
摘要由CSDN通过智能技术生成

C++中嵌入python程序——参数传递

前面两篇博客已经介绍如何在C++中嵌套使用 python,但是在实际使用中,我们需要向python传递各种各样的参数,这样的程序才具有更高的灵活性。下面简单介绍一下参数传递,整体代码不再给出,只介绍几个核心语法,只要掌握就能与前面代码结合起来生成完整可用的代码。

PyObject_CallMethod(pClass, “class_method”, “O”, pInstance)

参数分别为 PyObject(类),string(类方法),string(O表示参数为PyObject) ,PyObject(类实例)

PyObject_CallFunction(pFun, “O”, pyores)

参数分别为 PyObject(函数),string(O表示参数为PyObject) ,PyObject(函数中使用的参数)

问题来了,函数有多个参数怎么办,参数怎么传递?别担心,有多少个我们就写多少个:

PyObject_CallFunction(pFun, “OO…O”, PyObject 1,PyObject 2…PyObject n)

中间的O可替换成参数类型说明符中的任意一个,比如字符串s,int型变量i等等

创建一个元组

PyObject *pArgs = PyTuple_New(3);

PyTuple_SetItem(pArgs, 0, Py_BuildValue(“i”, 1));//0—序号 i表示创建int型变量

PyTuple_SetItem(pArgs, 1, Py_BuildValue(“i”, 2));

PyTuple_SetItem(pArgs, 2, Py_BuildValue(“i”, 3));

PyEval_CallObject(pFunc, pArgs); //调用函数,pArgs元素个数与被调函数参数个数一致

PyObject *pDict = PyDict_New(); //创建字典类型变量

PyDict_SetItemString(pDict, “Name”, Py_BuildValue(“s”, “Zhangsan”)); //往字典类型变量中填充数据

PyDict_SetItemString(pDict, “Address”, Py_BuildValue(“s”, “BeiJing”));

将上述字典赋值给元组

PyObject *pArgs = PyTuple_New(1);

PyTuple_SetItem(pArgs, 0, pDict)

python返回给C++的是PyObject类型,如果我想在纯C++程序里使用它怎么办:(可以使用下面这个函数

char * PyString_AsString(PyObject*)

至此,利用上面的几个基本参数传递方法,已经可以创建灵活性较强的C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值