如何将二维数组从C传递给Python

我想从C传递二维数组到python。

我如何使用Py_BuildValue()PyEval_CallObject()

例如,我可以使用以下代码将字符串从C传递给python:

 pModule = PyImport_ImportModule("python_code"); pFunc = PyObject_GetAttrString(pModule, "main"); pParam = Py_BuildValue("(s)", "HEHEHE"); pResult = PyEval_CallObject(pFunc,pParam); 

现在,我想将二维数组和字符串传递给python

所以基本上,你想构建一个元组,而不是解析元组。

这只是一个简单的例子,说明如何将arr转换为元组元组。 在这里你应该在某个时间点添加一些错误检查。

 Py_ssize_t len = arr.size(); PyObject *result = PyTuple_New(len); for (Py_ssize_t i = 0; i < len; i++) { Py_ssize_t len = arr[i].size(); PyObject *item = PyTuple_New(len); for (Py_ssize_t j = 0; i < len; j++) PyTuple_SET_ITEM(item, j, PyInt_FromLong(arr[i][j])); PyTuple_SET_ITEM(result, i, item); } 

然后你可以像使用字符串一样构建你的args。 您可以使用O代替PyObject * (如果您不想增加引用计数,则使用N而不是s代表字符串:

 pParam = Py_BuildValue("(O)", result); 

也许boost :: python可以提供一个更简单的方法,但我自己并不真正了解这个库。

第二个循环需要从以下方面改变:

for (Py_ssize_t j = 0; i < len; j++)

for (Py_ssize_t j = 0; j < len; j++)

有正确的运行条件声明。