我正在编写一个返回多个Python对象的本机函数
PyObject *V = PyList_New(0);
PyObject *E = PyList_New(0);
PyObject *F = PyList_New(0);
return Py_BuildValue("ooo", V, E, F);
这个编译很好,但是,当我从Python程序调用它时,我收到一个错误:
SystemError:传递给Py_BuildValue的错误格式字符
如何正确完成?
编辑: 以下作品
PyObject *rslt = PyTuple_New(3);
PyTuple_SetItem(rslt, 0, V);
PyTuple_SetItem(rslt, 1, E);
PyTuple_SetItem(rslt, 2, F);
return rslt;
但是,有没有更短的方法来做到这一点?
答案 0 :(得分:7)
我认为它需要大写的O? "OOO"
,而非"ooo"
。
答案 1 :(得分:1)
正如 Ned Batcheder 指出的,Py_BuildValue 需要大写和括号来创建元组
Py_BuildValue("(OOO)", V, E, F);
实现相同结果的另一种选择是 PyTuple_Pack
PyTuple_Pack(3, V, E, F);
答案 2 :(得分:-3)
使用Cython。
return V, E, F