Py_BuildValue or PyList_SetItem()
Jack Diederich
jackdied at jackdied.com
Wed Jan 3 16:33:33 EST 2007
On Wed, Jan 03, 2007 at 01:16:38PM -0800, Sheldon wrote:
> I have a function that creates python objects out of C arrays and
> returns them to Python. Below is a working example that I later want to
> expand to return 12 arrays back to Python. The problem is that when I
> print out the values in Python I get undesired reults. See below. Does
> anyone know what is going on here?
> The array values are good before the conversion.
>
> **************************************
> int createPythonObject(void) {
> int i,j,k;
> PyObject *Rva=PyList_New(12);
>
> for (i = 0; i < 12; i++) {
> PyObject *op = PyFloat_FromDouble((double)va[i]);
> if (PyList_SetItem(Rva,i,op) !=0) {
> fprintf(stderr,"Error in creating python va object\n");
> exit(EXIT_FAILURE);
> }
> Py_DECREF(op);
> op = 0;
> return Py_BuildValue("N",Rva);
> }
>
> Results in Python:
>
> <refcnt 0 at 0x80d885c>, <refcnt 0 at 0x80d885c>, <refcnt 0 at
> 0x80d885c>, <refcnt 0 at 0x80d885c>, <refcnt 0 at 0x80d885c>, <refcnt 0
> at 0x80d885c>, <refcnt 0 at 0x80d885c>, <refcnt 0 at 0x80d885c>,
> <refcnt 0 at 0x80d885c>, <refcnt 0 at 0x80d885c>, <refcnt 0 at
> 0x80d885c>, <refcnt 0 at 0x80d885c>
>
PyList_SetItem steals a reference to "op" so DECREF'ing it reduces
the refcount to zero.
http://docs.python.org/api/listObjects.html
-Jack
More information about the Python-list
mailing list