序列协议 — Python 文档

来自菜鸟教程
Python/docs/2.7/c-api/sequence
跳转至:导航、​搜索

序列协议

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)

2.5 版更改: 这些函数返回 int 类型。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject *PySequence_Concat(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的连接,失败时返回 NULL。 这相当于 Python 表达式 o1 + o2
PyObject *PySequence_Repeat(PyObject *o, Py_ssize_t count)

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

2.5 版更改: 此函数使用 int 类型用于 count。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject *PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
成功时返回 o1o2 的连接,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 表达式 o1 += o2
PyObject *PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)

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

2.5 版更改: 此函数使用 int 类型用于 count。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject *PySequence_GetItem(PyObject *o, Py_ssize_t i)

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

2.5 版更改: 此函数使用 int 类型用于 i。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject *PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)

在失败时返回 i1i2 之间的序列对象 o 的切片,或 NULL。 这相当于 Python 表达式 o[i1:i2]

2.5 版更改: 此功能使用 int 类型用于 i1i2。 这可能需要更改您的代码才能正确支持 64 位系统。

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

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

如果 vNULL,则删除该元素,但不推荐使用此功能,以支持使用 PySequence_DelItem()

2.5 版更改: 此函数使用 int 类型用于 i。 这可能需要更改您的代码才能正确支持 64 位系统。

int PySequence_DelItem(PyObject *o, Py_ssize_t i)

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

2.5 版更改: 此函数使用 int 类型用于 i。 这可能需要更改您的代码才能正确支持 64 位系统。

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

将序列对象 v 分配给序列对象 o 中的切片,从 i1i2。 引发异常并在失败时返回 -1; 成功返回 0。 这相当于 Python 语句 o[i1:i2] = v

如果 vNULL,则删除切片,但不推荐使用此功能以支持使用 PySequence_DelSlice()

2.5 版更改: 此功能使用 int 类型用于 i1i2。 这可能需要更改您的代码才能正确支持 64 位系统。

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

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

2.5 版更改: 此功能使用 int 类型用于 i1i2。 这可能需要更改您的代码才能正确支持 64 位系统。

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)

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

2.5 版更改: 此函数返回 int 类型。 这可能需要更改您的代码才能正确支持 64 位系统。

int PySequence_Contains(PyObject *o, PyObject *value)
确定 o 是否包含 。 如果 o 中的一项等于 value,则返回 1,否则返回 0。 出错时,返回 -1。 这相当于 Python 表达式 value in o
Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)

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

2.5 版更改: 此函数返回 int 类型。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject *PySequence_List(PyObject *o)
返回与任意序列 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)

返回o的第i个元素,假设oPySequence_Fast()返回,o为不是 NULL,并且 i 在界限内。

2.5 版更改: 此函数使用 int 类型用于 i。 这可能需要更改您的代码才能正确支持 64 位系统。

PyObject **PySequence_Fast_ITEMS(PyObject *o)

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

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

2.4 版中的新功能。

PyObject *PySequence_ITEM(PyObject *o, Py_ssize_t i)

失败时返回 oNULL 的第 i 个元素。 PySequence_GetItem() 的宏形式,但没有检查 o 上的 PySequence_Check() 是否为真,并且没有对负索引进行调整。

2.3 版中的新功能。

2.5 版更改: 此函数使用 int 类型用于 i。 这可能需要更改您的代码才能正确支持 64 位系统。

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