在Python的C语言扩展中要用到整型、浮点型和字符串这三种数据类型时相对比较简单,只需要知道如何生成和维护它们就可以了。下面的例子给出了如何在C语言中使用Python的这三种数据类型:
[cpp]
例2:typeifs.c // build an integer PyObject* pInt = Py_BuildValue("i", 2003); assert(PyInt_Check(pInt)); int i = PyInt_AsLong(pInt); Py_DECREF(pInt); // build a float PyObject* pFloat = Py_BuildValue("f", 3.14f); assert(PyFloat_Check(pFloat)); float f = PyFloat_AsDouble(pFloat); Py_DECREF(pFloat); // build a string PyObject* pString = Py_BuildValue("s", "Python"); assert(PyString_Check(pString); int nLen = PyString_Size(pString); char* s = PyString_AsString(pString); Py_DECREF(pString);2.3.2 元组
Python语言中的元组是一个长度固定的数组,当Python解释器调用C语言扩展中的方法时,所有非关键字(non-keyword)参数都以元组方式进行传递。下面的例子示范了如何在C语言中使用Python的元组类型:
[cpp]
例3:typetuple.c // create the tuple PyObject* pTuple = PyTuple_New(3); assert(PyTuple_Check(pTuple)); assert(PyTuple_Size(pTuple) == 3); // set the item PyTuple_SetItem(pTuple, 0, Py_BuildValue("i", 2003)); PyTuple_SetItem(pTuple, 1, Py_BuildValue("f", 3.14f)); PyTuple_SetItem(pTuple, 2, Py_BuildValue("s", "Python")); // parse tuple items int i; float f; char *s; if (!PyArg_ParseTuple(pTuple, "ifs", &i, &f, &s)) PyErr_SetString(PyExc_TypeError, "invalid parameter"); // cleanup Py_DECREF(pTuple);2.3.3 列表
Python语言中的列表是一个长度可变的数组,列表比元组更为灵���,使用列表可以对其存储的Python对象进行随机访问。下面的例子示范了如何在C语言中使用Python的列表类型:
[cpp]
例4:typelist.c // create the list PyObject* pList = PyList_New(3); // new reference assert(PyList_Check(pList)); // set some initial values for(int i = 0; i < 3; ++i) PyList_SetItem(pList, i, Py_BuildValue("i", i)); // insert an item PyList_Insert(pList, 2, Py_BuildValue("s", "inserted")); // append an item PyList_Append(pList, Py_BuildValue("s", "appended")); // sort the list PyList_Sort(pList); // reverse the list PyList_Reverse(pList); // fetch and manipulate a list slice PyObject* pSlice = PyList_GetSlice(pList, 2, 4); // new reference for(int j = 0; j < PyList_Size(pSlice); ++j) { PyObject *pValue = PyList_GetItem(pList, j); assert(pValue); } Py_DECREF(pSlice); // cleanup Py_DECREF(pList);2.3.4 字典
Python语言中的字典是一个根据关键字进行访问的数据类型。下面的例子示范了如何在C语言中使用Python的字典类型: