passing list from C to Python

Mike Müller mmueller at
Tue Dec 12 13:21:52 CET 2000

How can I pass a list of values from C to Python an get the list back after
Python did some data manipulation on it?

I am not very familiar with C and use it only to get a call to a DLL from a
FORTRAN program . The functionality of the DLL is in Python. I am able to
call a function in python from the DLL  and get a return value like:

def test_int4(x,y):
    return x+y

I can do the same with doubles, so far everything is ok. All the win32/VC++
specific stuff seems to work.

Now my problem:
I have a lot of values which should be passed by reference to Python, i.e. I
want to change the values of all the arguments.

My approach would be to put them in a PyListObject and pass it to Python
(PyObject_CallMethod does nit work though). As return value I would get a
new PyListObject back which I could “unpack” to the new values of the FORTAN
function arguments.


def func(list):
      newList = []
      for x in list:
            y = do stuff(x)
     return newList

VC++ 6.0

extern "C" {  __declspec(dllexport) int  C_func_called_in DLL(double *arg1,
double *arg2)
// this works
{ Py_Initialize();
        if(PyErr_Occurred()) {
            return FALSE;
module_object = PyImport_ImportModule("pythonModul");
        if(PyErr_Occurred()) {
            return FALSE;
        if(!module_object) return FALSE;

PyListObject *list = Py_BuildValue("[ff]”, *arg1, *arg2);

// the following does not work, need something that calls python function
with list
    PyListObject *newList = PyObject_CallMethod(module_object,

"pythonModul", list);

PyObject* dataFromPy1 = PyList_GetItem(newList, 0);
PyObject* dataFromPy2 = PyList_GetItem(newList, 1);
*arg1 = PyFloat_asDouble(dataFromPy1);
*arg1 = PyFloat_asDouble(dataFromPy2);

return 0; //everything is ok

This might be faulty code, it just shows my intention what I WOULD like to

If there is any other simple way to do it, please let me know.
Hope things are not too confusing.


More information about the Python-list mailing list