5

我正在编写一个将返回多个 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;

但是,没有更短的方法可以做到这一点吗?

4

3 回答 3

9

我认为它需要大写 O? "OOO",不是"ooo"

于 2010-08-16T23:29:40.320 回答
1

正如 Ned Batcheder 指出的那样 Py_BuildValue 需要大写和括号来创建元组

Py_BuildValue("(OOO)", V, E, F);

实现相同结果的另一种选择是PyTuple_Pack

PyTuple_Pack(3, V, E, F);
于 2021-02-06T12:27:04.400 回答
-5

使用赛通

return V, E, F
于 2010-08-17T10:45:36.890 回答