Py_BuildValue or PyList_SetItem()

2007-01-03 Thread Sheldon
Hi,

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:

, , , , , , , ,
, , , 


Any help is appreciated!

/Sheldon

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Py_BuildValue or PyList_SetItem()

2007-01-03 Thread Jack Diederich
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:
> 
> , ,  0x80d885c>, , ,  at 0x80d885c>, , ,
> , ,  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
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Py_BuildValue or PyList_SetItem()

2007-01-03 Thread Sheldon

Jack Diederich skrev:

> 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:
> >
> > , ,  > 0x80d885c>, , ,  > at 0x80d885c>, , ,
> > , ,  > 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

Thanks Jack,

It works now!

/Sheldon

-- 
http://mail.python.org/mailman/listinfo/python-list