序列协议 — Python 文档
来自菜鸟教程
Python/docs/3.6/c-api/sequence
序列协议
- int PySequence_Check(PyObject *o)
- 如果对象提供序列协议,则返回
1
,否则返回0
。 请注意,它为具有__getitem__()
方法的 Python 类返回1
,除非它们是 dict 子类,因为在一般情况下无法确定它支持的键类型。 此功能总是成功。
- Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)
- 成功时按顺序返回对象数 o,失败时返回
-1
。 这相当于 Python 表达式len(o)
。
- 成功时返回 o1 和 o2 的连接,失败时返回 NULL。 这相当于 Python 表达式
o1 + o2
。
- 返回重复序列对象 o count 次或失败时 NULL 的结果。 这相当于 Python 表达式
o * count
。
- 成功时返回 o1 和 o2 的连接,失败时返回 NULL。 当o1支持时,该操作在就地完成。 这相当于 Python 表达式
o1 += o2
。
- 返回重复序列对象 o count 次或失败时 NULL 的结果。 当 o 支持时,操作在 就地 完成。 这相当于 Python 表达式
o *= count
。
- 失败时返回 o 的第 i 个元素,或 NULL。 这相当于 Python 表达式
o[i]
。
- 在失败时返回 i1 和 i2 之间的序列对象 o 的切片,或 NULL。 这相当于 Python 表达式
o[i1:i2]
。
- int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)
将对象 v 分配给 o 的第 i 个元素。 引发异常并在失败时返回
-1
; 成功返回0
。 这相当于 Python 语句o[i] = v
。 此函数 不会 窃取对 v 的引用。如果 v 是 NULL,则删除该元素,但不推荐使用此功能,以支持使用 PySequence_DelItem()。
- int PySequence_DelItem(PyObject *o, Py_ssize_t i)
- 删除对象 o 的第 i 个元素。 失败时返回
-1
。 这相当于 Python 语句del o[i]
。
- 将序列对象 v 分配给序列对象 o 中的切片,从 i1 到 i2。 这相当于 Python 语句
o[i1:i2] = v
。
- int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
- 从i1到i2删除序列对象o中的切片。 失败时返回
-1
。 这相当于 Python 语句del o[i1:i2]
。
- 返回o中value的出现次数,即返回
o[key] == value
对应的key的个数。 失败时,返回-1
。 这相当于 Python 表达式o.count(value)
。
- 确定 o 是否包含 值 。 如果 o 中的一项等于 value,则返回
1
,否则返回0
。 出错时,返回-1
。 这相当于 Python 表达式value in o
。
- 返回第一个索引 i 其中
o[i] == value
。 出错时,返回-1
。 这相当于 Python 表达式o.index(value)
。
- 在失败时返回与序列或可迭代 [X72X]o 或 NULL 具有相同内容的列表对象。 返回的列表保证是新的。 这相当于 Python 表达式
list(o)
。
- 失败时返回与序列或可迭代 [X73X]o 或 NULL 具有相同内容的元组对象。 如果 o 是一个元组,将返回一个新的引用,否则将使用适当的内容构造一个元组。 这相当于 Python 表达式
tuple(o)
。
- 将序列或可迭代 o 作为列表返回,除非它已经是元组或列表,在这种情况下,返回 o。 使用 PySequence_Fast_GET_ITEM() 访问结果的成员。 失败时返回 NULL。 如果对象不是序列或可迭代对象,则使用 m 作为消息文本引发 TypeError。
- Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)
- 返回 o 的长度,假设 o 由 PySequence_Fast() 返回,并且 o 不是 NULL ]。 大小也可以通过在 o 上调用 PySequence_Size() 来获得,但是 PySequence_Fast_GET_SIZE() 更快,因为它可以假设 o 是一个列表或元组。
- 返回o的第i个元素,假设o由PySequence_Fast()返回,o为不是 NULL,并且 i 在界限内。
- PyObject **PySequence_Fast_ITEMS(PyObject *o)
返回底层的 PyObject 指针数组。 假设 o 由 PySequence_Fast() 返回,而 o 不是 NULL。
请注意,如果列表被调整大小,重新分配可能会重新定位项目数组。 因此,仅在序列无法更改的上下文中使用底层数组指针。
- 失败时返回 o 或 NULL 的第 i 个元素。 PySequence_GetItem() 的宏形式,但没有检查 o 上的 PySequence_Check() 是否为真,并且没有对负索引进行调整。