[EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list