我想将二维数组从C传递给python。
如何使用PyEval_CallObject()
和pModule = PyImport_ImportModule("python_code");
pFunc = PyObject_GetAttrString(pModule, "main");
pParam = Py_BuildValue("(s)", "HEHEHE");
pResult = PyEval_CallObject(pFunc,pParam);
?
例如,我可以使用以下代码将字符串从C传递给python:
{{1}}
现在,我想将二维数组和字符串传递给python
答案 0 :(得分:2)
基本上,你想要构建一个元组,而不是解析一个。
这只是一个简单的示例,说明如何将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。您可以使用s
代替O
代替PyObject *
(N
,如果您不想增加引用次数):
pParam = Py_BuildValue("(O)", result);
也许boost::python可以提供更简单的方法,但我自己并不真正了解这个库。
答案 1 :(得分:0)
第二个循环需要从以下方面进行微妙的改变:
for (Py_ssize_t j = 0; i < len; j++)
到
for (Py_ssize_t j = 0; j < len; j++)
使用正确的运行条件声明。