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