序列协议

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* 的引用。

如果 *v* 为 NULL,则删除该元素,但此功能已弃用,建议使用 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* 中从 *i1* 到 *i2* 的切片。这等效于 Python 语句 o[i1:i2] = v

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

删除序列对象 *o* 中从 *i1* 到 *i2* 的切片。如果失败,则返回 -1。这等效于 Python 语句 del o[i1:i2]

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

返回ovalue出现的次数,即返回键的数量,对于这些键,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

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* 函数之所以这样命名,是因为它们假设 *o* 是一个 PyTupleObject 或一个 PyListObject,并直接访问 *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

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

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

返回 *o* 的第 *i* 个元素,如果失败则返回 NULLPySequence_GetItem() 的更快形式,但没有检查 PySequence_Check() 在 *o* 上是否为真,并且没有对负索引进行调整。