C++调用返回多个值的Python函数_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++调用返回多个值的Python函数

C++调用返回多个值的Python函数

 2011/12/9 9:40:30  chensx  http://chensx.iteye.com  我要评论(0)
  • 摘要:某些时候,用python模块来实现一些特定的功能会比用其他类型的模块更加简洁方便。在C++程序中,调用python模块时需要加载一些必要的libs,这些libs在网上都可以找到。下面的代码演示了C++程序如何调用python中的函数,并得到从python函数中返回的多个值。#filename:cal.py#returntype:tupledefmix(a,b):r1=a+br2=a-breturn(r1,r2)#(7,3)#include"stdafx.h"#include"
  • 标签:函数 c++ Python
      某些时候,用python模块来实现一些特定的功能会比用其他类型的模块更加简洁方便。
在C++程序中,调用python模块时需要加载一些必要的libs,这些libs在网上都可以找到。下面的代码演示了C++程序如何调用python中的函数,并得到从python函数中返回的多个值。

# filename : cal.py
# return type : tuple
def mix(a, b) :
    r1 = a + b
    r2 = a - b
    return (r1, r2) # (7,3)

#include "stdafx.h"
#include ".\\include\\Python.h"

int _tmain(int argc, _TCHAR* argv[])
{
	string filename = "cal"; // cal.py
	string methodname_mix = "mix"; // function name

	Py_Initialize();  

	// load the module
	PyObject * pyFileName = PyString_FromString(filename.c_str());
	PyObject * pyMod = PyImport_Import(pyFileName); 

	// load the function
	PyObject * pyFunc_mix = PyObject_GetAttrString(pyMod, methodname_mix.c_str());

	// test the function is callable
    if (pyFunc_mix && PyCallable_Check(pyFunc_mix))
	{
		PyObject * pyParams = PyTuple_New(2);
		PyTuple_SetItem(pyParams, 0, Py_BuildValue("i", 5));
		PyTuple_SetItem(pyParams, 1, Py_BuildValue("i", 2));

		// ok, call the function
        int r1 = 0, r2 = 0;
		PyObject * pyValue = PyObject_CallObject(pyFunc_mix, pyParams);			
		PyArg_ParseTuple(pyValue, "i|i", &r1, &r2);
		if (pyValue)
		{
			printf("%d,%d\n", r1, r2); //output is 7,3
		}		
	}

	Py_Finalize();  

	return 0;
}
发表评论
用户名: 匿名