#Though it looks like an ordinary python import, the addList module is implemented in Cimport addListl = [1,2,3,4,5]print"Sum of List - "+str(l)+" = "+str(addList.add(l))
//Python.h has all the required function definitions to manipulate the Python objects#include<Python.h>//This is the function that is called from your python codestatic PyObject*addList_add(PyObject* self, PyObject* args){ PyObject * listObj;//The input arguments come as a tuple, we parse the args to get the various variables//In this case it's only one list variable, which will now be referenced by listObjif (!PyArg_ParseTuple( args,"O",&listObj ))returnNULL;//length of the listlong length =PyList_Size(listObj);//iterate over all the elementsint i, sum =0;for (i =0; i < length; i++) {//get an element out of the list - the element is also a python objects PyObject* temp =PyList_GetItem(listObj, i);//we know that object represents an integer - so convert it into C longlong elem =PyInt_AsLong(temp); sum += elem; }//value returned back to python code - another python object//build value here converts the C long to a python integerreturnPy_BuildValue("i", sum);}//This is the docstring that corresponds to our 'add' function.staticchar addList_docs[]="add( ): add all elements of the list\n";/* This table contains the relavent info mapping - <function-name in python module>, <actual-function>, <type-of-args the function expects>, <docstring associated with the function> */static PyMethodDef addList_funcs[]= { {"add", (PyCFunction)addList_add, METH_VARARGS, addList_docs}, {NULL,NULL,0,NULL}};/* addList is the module name, and this is the initialization block of the module. <desired module name>, <the-info-table>, <module's-docstring> */PyMODINIT_FUNC initaddList(void){Py_InitModule3("addList", addList_funcs,"Add all ze lists");}