Je suis en train d'écrire une fonction native qui renverra plusieurs objets PythonDe retour un tuple d'objets multipe dans l'API Python C
PyObject *V = PyList_New(0);
PyObject *E = PyList_New(0);
PyObject *F = PyList_New(0);
return Py_BuildValue("ooo", V, E, F);
Cette compile bien, cependant, quand je l'appelle d'un programme Python, je reçois un erreur:
SystemError: bad format char passed to Py_BuildValue
Comment cela peut-il être fait correctement?
EDIT: Les travaux suivants
PyObject *rslt = PyTuple_New(3);
PyTuple_SetItem(rslt, 0, V);
PyTuple_SetItem(rslt, 1, E);
PyTuple_SetItem(rslt, 2, F);
return rslt;
Cependant, n'est pas là un moyen plus court pour le faire?
Vous devez également se rappeler de décrémenter le compte de référence sur V, E et F ('Py_DECREF (V);', etc.) après avoir appelé 'Py_BuildValue', car' Py_BuildValue' incrémente le compteur de référence de tout objet utilisé avec le spécificateur de format 'O' (voir http://docs.python.org/c-api/arg.html#Py_BuildValue). Sinon, les listes ne seront jamais libérées et vous aurez une fuite de mémoire. – jchl
Merci pour la suggestion. Je retourne 'Py_BuildValue (" NNN ", V, E, F)' qui n'incrémente pas le nombre de références. – dzhelil