python to c API, passing a tuple array
imdognuts at yahoo.com
imdognuts at yahoo.com
Mon Apr 17 18:37:50 EDT 2006
Thanks for the solution!
Farshid Lashkari wrote:
> 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