用C语言扩展Python的功能(2)

在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的字典类型:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wygwdx.html