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

Cythonを使用します。

return V, E, F
于 2010-08-17T10:45:36.890 に答える