python to c API, passing a tuple array

I

imdognuts

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.
 
F

Farshid Lashkari

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
 
I

imdognuts

Thanks for the solution!

Farshid said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top