2010-08-16 3 views
3

파이썬 C API의 multipe 객체의 튜플을 반환 내가 여러 파이썬을 반환하는 기본 기능을 쓰고 있어요

PyObject *V = PyList_New(0); 
PyObject *E = PyList_New(0); 
PyObject *F = PyList_New(0); 

return Py_BuildValue("ooo", V, E, F); 

이 내가 파이썬 프로그램에서 호출 할 때, 그러나 잘 컴파일 오브젝트, 나는 얻을 오류 :

SystemError: bad format char passed to 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

는 또한 V, E와 F의 참조 카운트를 감소하기 위해 기억해야 'O'형식 지정자와 함께 사용되는 개체 (http://docs.python.org/c-api/arg.html#Py_BuildValue 참조) 그렇지 않으면 목록이 해제되지 않으며 메모리 누수가 발생합니다. – jchl

+0

제안 해 주셔서 감사합니다. 참조 횟수를 증가시키지 않는'Py_BuildValue ("NNN", V, E, F)'를 반환하고 있습니다. – dzhelil

답변

7

대문자를 원하는가요? "OOO"이 아니라 "ooo"입니다.

+0

여전히 동일한 오류 메시지가 나타납니다. – dzhelil

+0

죄송합니다. 내 대답이 완전히 바뀌 었습니다. 다시 시도해주세요 ... –

+0

아마도 괄호를 추가하여 파이썬이 터플을 만들고 싶다는 것을 이해하게 할 수도 있습니다 : return Py_BuildValue ("(OOO)", V, E, F); – ThR37

-2

Cython을 사용하십시오. `Py_BuildValue` 어떤의 참조 카운트가 증가하기 때문에,`Py_BuildValue`을 호출 한 후 (`등`Py_DECREF (V))

return V, E, F 
관련 문제