序列协议

int PySequence_Check(PyObject *o)
作为 稳定 ABI 的一部分。

如果对象提供序列协议,则返回 1,否则返回 0。请注意,对于具有 __getitem__() 方法的 Python 类,它返回 1,除非它们是 dict 子类,因为通常无法确定该类支持哪种类型的键。此函数总是成功的。

Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)
作为 稳定 ABI 的一部分。

成功时返回序列 o 中对象的数量,失败时返回 -1。这等同于 Python 表达式 len(o)

PyObject *PySequence_Concat(PyObject *o1, PyObject *o2)
返回值: 新引用。 稳定ABI 的一部分。

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

PyObject *PySequence_Repeat(PyObject *o, Py_ssize_t count)
返回值: 新引用。 稳定ABI 的一部分。

返回序列对象 o 重复 count 次的结果,失败时返回 NULL。这等同于 Python 表达式 o * count

PyObject *PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
返回值: 新引用。 稳定ABI 的一部分。

成功时返回 o1o2 的连接,失败时返回 NULL。当 o1 支持时,此操作是 原地 完成的。这等同于 Python 表达式 o1 += o2

PyObject *PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
返回值: 新引用。 稳定ABI 的一部分。

返回序列对象 o 重复 count 次的结果,失败时返回 NULL。当 o 支持时,此操作是 原地 完成的。这等同于 Python 表达式 o *= count

PyObject *PySequence_GetItem(PyObject *o, Py_ssize_t i)
返回值: 新引用。 稳定ABI 的一部分。

返回 o 的第 i 个元素,失败时返回 NULL。这等同于 Python 表达式 o[i]

PyObject *PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
返回值: 新引用。 稳定ABI 的一部分。

返回序列对象 oi1i2 之间的切片,失败时返回 NULL。这等同于 Python 表达式 o[i1:i2]

int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)
作为 稳定 ABI 的一部分。

将对象 v 赋值给 o 的第 i 个元素。失败时引发异常并返回 -1;成功时返回 0。这等同于 Python 语句 o[i] = v。此函数 窃取 v 的引用。

如果 vNULL,则删除该元素,但此功能已被弃用,建议使用 PySequence_DelItem()

int PySequence_DelItem(PyObject *o, Py_ssize_t i)
作为 稳定 ABI 的一部分。

删除对象 o 的第 i 个元素。失败时返回 -1。这等同于 Python 语句 del o[i]

int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)
作为 稳定 ABI 的一部分。

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

int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
作为 稳定 ABI 的一部分。

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

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)
作为 稳定 ABI 的一部分。

返回 valueo 中出现的次数,即返回 o[key] == value 的键的数量。失败时返回 -1。这等同于 Python 表达式 o.count(value)

int PySequence_Contains(PyObject *o, PyObject *value)
作为 稳定 ABI 的一部分。

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

int PySequence_In(PyObject *o, PyObject *value)
作为 稳定 ABI 的一部分。

PySequence_Contains() 的别名。

自 3.14 版本弃用: 此函数已 软弃用,不应再用于编写新代码。

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)
作为 稳定 ABI 的一部分。

返回第一个索引 i,使得 o[i] == value。出错时返回 -1。这等同于 Python 表达式 o.index(value)

PyObject *PySequence_List(PyObject *o)
返回值: 新引用。 稳定ABI 的一部分。

返回一个列表对象,其内容与序列或可迭代对象 o 相同,失败时返回 NULL。返回的列表保证是新的。这等同于 Python 表达式 list(o)

PyObject *PySequence_Tuple(PyObject *o)
返回值: 新引用。 稳定ABI 的一部分。

返回一个元组对象,其内容与序列或可迭代对象 o 相同,失败时返回 NULL。如果 o 是元组,则返回一个新的引用,否则将构造一个具有适当内容的元组。这等同于 Python 表达式 tuple(o)

PyObject *PySequence_Fast(PyObject *o, const char *m)
返回值: 新引用。 稳定ABI 的一部分。

将序列或可迭代对象 o 返回为一个可供其他 PySequence_Fast* 系列函数使用的对象。如果对象不是序列或可迭代对象,则会引发 TypeError,并以 m 作为消息文本。失败时返回 NULL

PySequence_Fast* 函数之所以这样命名,是因为它们假定 oPyTupleObjectPyListObject,并直接访问 o 的数据字段。

作为 CPython 实现细节,如果 o 已经是序列或列表,则会返回它。

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

返回 o 的长度,假设 o 是由 PySequence_Fast() 返回的且 o 不为 NULL。长度也可以通过在 o 上调用 PySequence_Size() 来获取,但 PySequence_Fast_GET_SIZE() 更快,因为它假定 o 是一个列表或元组。

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

返回 o 的第 i 个元素,假设 o 是由 PySequence_Fast() 返回的,o 不为 NULL,且 i 在边界内。

PyObject **PySequence_Fast_ITEMS(PyObject *o)

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

请注意,如果列表大小调整,重新分配可能会重新定位 items 数组。因此,仅在序列不能更改的上下文中才使用底层数组指针。

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

返回 o 的第 i 个元素,失败时返回 NULL。这是 PySequence_GetItem() 的更快形式,但不检查 PySequence_Check()o 上是否为 True,并且不对负索引进行调整。