Extending python
Lyle Johnson
ljohnson at resgen.com
Wed May 23 13:21:07 EDT 2001
> Are there any docs which provide examples on how to extend python with
> C/C++ other than the one at www.python.org?? I don't seem to understand
how
> to use PyObject *. If I pass a list or tuple to my C function, and in my
> function I extract the list or tuple using "O" as a format specifier in a
> call to PyArg_ParseTuple, how do I actually get the integers or strings
from
> the PyObject??? What I'm trying to do is pass a variable number of data
to
> my C function through an array. So is it proper to pass a list/tuple to
my
> C wrapper function and extract the elements into a dynamic array, which I
> then pass to my C function? Please advise...
If you have a pointer to a PyObject, and you know that the object is a
"sequence" of some kind (including Python lists and tuples), you can extract
the objects in that sequence using PySequence_GetItem(), e.g.
PyObject* sequenceObj;
PyObject* sequenceItem;
int i, size;
if (!PySequence_Check(sequenceObj)) {
fprintf(stderr, "You filthy liar! This isn't a sequence!\n");
return;
}
size = PySequence_Size(sequenceObj);
if (size == -1) {
/* An error occurred... */
return;
}
for (i = 0; i < size; i++) {
sequenceItem = PySequence_GetItem(sequenceObj, i);
if (sequenceItem == NULL) {
/* an error occurred */
return;
}
else {
/* do something with this sequence element */
}
}
There are also APIs to deal directly with Python list and tuple objects
(PyList_Size, PyList_GetItem, PyTuple_Size and PyTuple_GetItem) but you
provide yourself with a lot more flexibility by using the abstract
"sequence" APIs.
Hope this helps,
Lyle
More information about the Python-list
mailing list