python to c API, passing a tuple array

Farshid Lashkari flashkNO at SPAMgmail.com
Fri Apr 14 21:29:40 EDT 2006


imdognuts at yahoo.com wrote:
> Hi,
> I want to pass something like this to a C function via the Python C
> API.
> mytuple = (("string_one", 1.2, 1.3), ("string_two", 1.4, 1.5), ......,
> .....,  )
> This tuple is dynamic in size, it needs to be 3 X N dimensions. each
> tuple in the
> tuple array is of the form (string, float, float) as described above
> 
> so from python:
> 
> mytuple = (("string_one", 1.2, 1.3), ("string_two", 1.4, 1.5))
> api.myCFunction(mytuple)
> 
> The C api:
> static PyObject *myCFunction(PyObject *self, PyObject *args)
> {
> 
>     if (!PyArg_ParseTuple(args, "O", ..... ?????????????)  {
>         printf(" error in PyArg_ParseTuple!\n");
>         return Py_None;
>     }
> 
> Thanks.
> 


Just loop through each item in the arguments and parse the sub-tuple. 
Here is some sample code that doesn't do any error checking:

static PyObject *myCFunction(PyObject *self, PyObject *args)
{
     int numItems, i;
     PyObject *tuple;

     numItems = PyTuple_Size(args);

     for(i = 0; i < numItems; ++i)
     {
         tuple = PyTuple_GetItem(args,i);
         if(!PyArg_ParseTuple(tuple,"sff",...) {
             //handle error
             Py_RETURN_NONE;
         }
     }
}

Also, you need to INCREF Py_None before you return it. Or you can use 
the macro used in the sample code above.

-Farshid



More information about the Python-list mailing list