C++与Python的混合编程-调用有参函数以及C++数据类型与Python数据类型间的转换
2013-08-08 15:10
751 查看
上一篇讲到Pythonn与C++的混合编程时,我们使用的C++来调用的是Python的无参函数。那么我们在这里进一步,涉及到有参函数。那么我们就需要将C++的类型转换到Python的数据类型。这里我们需要PyObject*Py_BuildValue(constchar
*format, ...)函数。
Python代码:
C++代码:
示例程序中Py_BuildValue("(s)","heacewalker"),其中”(s)”是参数类型,”heacewalker”是给予参数的值。
下面列出了一些Py_BuildValue()的使用方式,具体的format格式使用可以查询Python的帮助文档。
最后关于这个函数PyEval_CallObject(pFunc,pArg)其中上一篇无参函数pArg参数位置是NULL。
接下来这里贴出关于两个参数的函数的相关Python与C++代码。
Python代码:
C++代码:
这里Python函数最终会返回两个数的和,我们需要将这个值给整型变量answer,所以这里会引发另一个问题,就是将Python类型转换到C++类型,需要使用该函数intPyArg_Parse(PyOject *args,
const char *format, ...)具体使用可以查看Python的帮助文档,其中args是需要转换的Python的数据对象,而format部分是与Py_BuildValue函数中的一样。
*format, ...)函数。
Python代码:
def Hello(valuestr): print "Hello," + valuestr
C++代码:
void PyDemo_2() { PyObject * pModule = NULL; PyObject * pFunc = NULL; PyObject * pArg = NULL; pModule = PyImport_ImportModule("demo2"); pFunc = PyObject_GetAttrString(pModule, "Hello"); pArg = Py_BuildValue("(s)", "heacewalker"); PyEval_CallObject(pFunc, pArg); }
示例程序中Py_BuildValue("(s)","heacewalker"),其中”(s)”是参数类型,”heacewalker”是给予参数的值。
下面列出了一些Py_BuildValue()的使用方式,具体的format格式使用可以查询Python的帮助文档。
Py_BuildValue("") | None |
Py_BuildValue("i",1) | 1 |
Py_BuildValue("ii",1,2) | (1,2) |
Py_BuildValue("()") | () |
Py_BuildValue("(i)",1) | (1) |
Py_BuildValue("(ii)",1,2) | (1,2) |
Py_BuildValue("(i,i)",1,2) | (1,2) |
接下来这里贴出关于两个参数的函数的相关Python与C++代码。
Python代码:
def Addition(fst_val, snd_val): return fst_val + snd_val
C++代码:
void PyDemo_1() { PyObject * pModule = NULL; PyObject * pFunc = NULL; PyObject * pArg = NULL; PyObject * pAns = NULL; int first_value = 0; int second_value = 0; cout<<"Please enter two integer number:"; cin>>first_value>>second_value; pModule = PyImport_ImportModule("demo1"); pFunc = PyObject_GetAttrString(pModule, "Addition"); pArg = Py_BuildValue("ii", first_value, second_value); pAns = PyEval_CallObject(pFunc,pArg); int answer = 0; PyArg_Parse(pAns, "i", &answer); cout<<"The addition of these two number is "<<answer; }
这里Python函数最终会返回两个数的和,我们需要将这个值给整型变量answer,所以这里会引发另一个问题,就是将Python类型转换到C++类型,需要使用该函数intPyArg_Parse(PyOject *args,
const char *format, ...)具体使用可以查看Python的帮助文档,其中args是需要转换的Python的数据对象,而format部分是与Py_BuildValue函数中的一样。
相关文章推荐
- C#与C++的混合编程 之三 C++与C#的数据传递与类型转换
- C++与Python的混合编程-环境配置与调用无参函数
- 混合编程之——C++调用python2.7&python3.5
- C#调用C++的DLL 所有数据类型转换方式
- C++数据类型转换以及转换构造函数
- time_t、struct tm,ctime各数据类型、函数详解,转换以及跟时间字符串的转换
- C++ Pirmer : 第十四章 : 重载运算符与类型转换之函数调用运算符与标准库的定义的函数对象
- 【Python】数据类型转换相关函数大集合
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- 生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- C++ 关于static_cast reinterpret_cast dynamic_cast 以及 const_cast 用于类型转换的函数使用 20180315 day7
- C#调用C++ DLL数据类型转换
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- VC++与Matlab混合编程之二:调用Matlab中M函数转换成DLL文件的形式
- C#——调用C++的DLL 数据类型转换
- 深入讲解C++数据类型转换的相关函数的知识
- Ajax学习笔记(3)异步调用web service以及客户端服务器端数据类型转换
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- C#调用C++的DLL 所有数据类型转换方式