在Python C API中返回多个对象的元组
我正在写一个本地函数,它会返回多个Python对象。
PyObject *V = PyList_New(0);
PyObject *E = PyList_New(0);
PyObject *F = PyList_New(0);
return Py_BuildValue("ooo", V, E, F);
这个代码编译得很好,但是当我从Python程序中调用它时,出现了一个错误:
系统错误:传递给Py_BuildValue的格式字符不正确。
我该怎么才能正确地做到这一点呢?
编辑:以下代码可以正常工作。
PyObject *rslt = PyTuple_New(3);
PyTuple_SetItem(rslt, 0, V);
PyTuple_SetItem(rslt, 1, E);
PyTuple_SetItem(rslt, 2, F);
return rslt;
不过,难道没有更简短的方法吗?
3 个回答
-6
使用 Cython。
return V, E, F
2
正如Ned Batcheder提到的,Py_BuildValue
这个函数需要用大写字母和括号来创建元组。
Py_BuildValue("(OOO)", V, E, F);
另外一个实现相同效果的选项是 PyTuple_Pack
。
PyTuple_Pack(3, V, E, F);
13
我觉得它想要的是大写的“O”?也就是"OOO"
,而不是小写的"ooo"
。