Sequence Protocol

int PySequence_Check(PyObject *o)

如果对象提供序列协议,则返回1,否则返回0此函数总是成功。

Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)

成功返回序列o中的对象数,失败时返回-1对于不提供序列协议的对象,这相当于Python表达式len(o)

PyObject* PySequence_Concat(PyObject *o1, PyObject *o2)
返回值:新引用。

成功时返回o1o2的连接,失败时返回NULL这等效于Python表达式o1 + o2

PyObject* PySequence_Repeat(PyObject *o, Py_ssize_t count)
返回值:新引用。

返回失败时重复序列对象o 计数的结果,或NULL这等效于Python表达式o * count

PyObject* PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
返回值:新引用。

成功时返回o1o2的连接,失败时返回NULLo1支持时,操作完成in-place这等效于Python表达式o1 + = o2

PyObject* PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
返回值:新引用。

返回失败时重复序列对象o 计数的结果,或NULLo支持它时,操作在就地完成。这相当于Python表达式o * = count

PyObject* PySequence_GetItem(PyObject *o, Py_ssize_t i)
返回值:新引用。

在失败时返回oi th元素或NULL这相当于Python表达式o[i]

PyObject* PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
返回值:新引用。

返回故障时在i1i2之间或NULL之间的序列对象o这相当于Python表达式o[i1:i2]

int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)

将对象v分配给oi th元素。引发异常并在失败时返回-1;返回0成功。这等效于Python语句o [i] = v。此函数不会窃取对v的引用。

如果vNULL,则会删除该元素,但是此功能已弃用,有利于使用PySequence_DelItem()

int PySequence_DelItem(PyObject *o, Py_ssize_t i)

删除对象oi th元素。失败时返回-1这等效于Python语句del o [i]

int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)

将序列对象v分配给序列对象o中从i1i2的切片。这等效于Python语句o [i1:i2] = v

int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)

删除i1i2的序列对象o中的切片。失败时返回-1这等效于Python语句del o [i1:i2]

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)

返回o中的出现次数,即返回o [key] == value失败时,返回-1这相当于Python表达式o.count(value)

int PySequence_Contains(PyObject *o, PyObject *value)

确定o是否包含如果o中的项目等于,则返回1,否则返回0出错时,返回-1这等同于 o中的Python表达式

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)

返回o [i] == 的第一个索引i出错时,返回-1这相当于Python表达式o.index(value)

PyObject* PySequence_List(PyObject *o)
返回值:新引用。

在失败时返回与序列或可迭代oNULL内容相同的列表对象。返回的列表保证是新的。这相当于Python表达式list(o)

PyObject* PySequence_Tuple(PyObject *o)
返回值:新引用。

在失败时返回与任意序列oNULL内容相同的元组对象。如果o是元组,将返回新的引用,否则将使用适当的内容构造元组。这相当于Python表达式tuple(o)

PyObject* PySequence_Fast(PyObject *o, const char *m)
返回值:新引用。

将序列o作为列表返回,除非它已经是元组或列表,在这种情况下返回o使用PySequence_Fast_GET_ITEM()访问结果的成员。失败时返回NULL如果对象不是序列,用m引发TypeError作为消息文本。

PyObject* PySequence_Fast_GET_ITEM(PyObject *o, Py_ssize_t i)
返回值:借用引用。

返回oi th元素,假设oPySequence_Fast()o 不是NULL,且i在范围内。

PyObject** PySequence_Fast_ITEMS(PyObject *o)

返回PyObject指针的底层数组。假设PySequence_Fast()o不是NULL返回o

注意,如果列表调整大小,重新分配可能会重新定位items数组。所以,只有在序列不能改变的上下文中使用底层数组指针。

PyObject* PySequence_ITEM(PyObject *o, Py_ssize_t i)
返回值:新引用。

在失败时返回oNULLi元素。Macro form of PySequence_GetItem() but without checking that PySequence_Check() on o is true and without adjustment for negative indices.

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

返回o的长度,假设oPySequence_Fast()返回,o不是 NULL也可以通过在o上调用PySequence_Size()获得大小,但PySequence_Fast_GET_SIZE()更快,因为它可以假设/ t7>是一个列表或元组。