[capi-sig] Py_BuildValue, Array from C to Python
Hrvoje Niksic
hniksic at xemacs.org
Sun Jan 18 09:56:05 CET 2009
Philipp Heuser <philipp at achtziger.de> writes:
> I am trying to return an array from C to Python. Since it is of
> variable size,
>
> return Py_BuildValue("[f,f,f]", array[0], array[1], array[2]);
>
> does not help. How do I do that?
You can do it like you'd do it in Python: get an empty list, append
array elements to it in a loop, and return the resulting list when
you're done. Since you're coding it in C, it might make sense to
attempt to be a bit more efficient and preallocate the list to exactly
the needed size.
PyObject *lst = PyList_New(array_len);
if (!lst)
return NULL;
for (i = 0; i < array_len; i++) {
PyObject *num = PyFloat_FromDouble(array[i]);
if (!num) {
Py_DECREF(lst);
return NULL;
}
PyList_SET_ITEM(lst, i, num); // reference to num stolen
}
return lst;
More information about the capi-sig
mailing list