On this page
Sequence Protocol
int
PySequence_Check
(PyObject ** o *)Py_ssize_t
PySequence_Size
(PyObject ** o *)Py_ssize_t
PySequence_Length
(PyObject ** o *)- 如果成功,则按 Sequences 返回对象* o *,如果失败则返回
-1
。这等效于 Python 表达式len(o)
。
- 如果成功,则按 Sequences 返回对象* 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]
。
返回序列对象* o 在 i1 和 i2 *之间的切片,或者在失败时返回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
。该Function不会窃取 v *的引用。
- 将对象* v 分配给 o 的第 i 个元素。引发异常并在失败时返回
如果* v *为NULL
,则删除该元素,但是不建议使用此Function,而推荐使用PySequence_DelItem()。
int
PySequence_DelItem
(PyObject ** o *,Py_ssize_t * i *)- 删除对象* o 的第 i *个元素。失败时返回
-1
。这等效于 Python 语句del o[i]
。
- 删除对象* o 的第 i *个元素。失败时返回
int
PySequence_SetSlice
(PyObject **o *,Py_ssize_t * i1 ,Py_ssize_t * i2 ,PyObject v *)- 将序列对象* v 分配给序列对象 o 中的切片,从 i1 到 i2 *。这等效于 Python 语句
o[i1:i2] = v
。
- 将序列对象* v 分配给序列对象 o 中的切片,从 i1 到 i2 *。这等效于 Python 语句
int
PySequence_DelSlice
(PyObject ** o *,Py_ssize_t * i1 *,Py_ssize_t * i2 *)- 从* i1 到 i2 删除序列对象 o *中的切片。失败时返回
-1
。这等效于 Python 语句del o[i1:i2]
。
- 从* i1 到 i2 删除序列对象 o *中的切片。失败时返回
Py_ssize_t
PySequence_Count
(PyObject *o ,PyObject value *)- 返回* o 中 value *的出现次数,即返回
o[key] == value
的键的数目。失败时,返回-1
。这等效于 Python 表达式o.count(value)
。
- 返回* o 中 value *的出现次数,即返回
int
PySequence_Contains
(PyObject *o ,PyObject value *)- 确定* o 是否包含 value 。如果 o 中的项等于 value *,则返回
1
,否则返回0
。出错时,返回-1
。这等效于 Python 表达式value in o
。
- 确定* o 是否包含 value 。如果 o 中的项等于 value *,则返回
Py_ssize_t
PySequence_Index
(PyObject *o ,PyObject value *)- 返回
o[i] == value
的第一个索引* i *。出错时,返回-1
。这等效于 Python 表达式o.index(value)
。
- 返回
PyObject *
PySequence_List
(PyObject ** o *)- 返回值:新参考.
返回具有与序列相同的内容或可迭代的* o *或失败的NULL
的列表对象。返回的列表保证是新的。这等效于 Python 表达式list(o)
。
返回具有与序列相同的内容或可迭代* o 或失败的NULL
的 Tuples 对象。如果 o *是一个 Tuples,则将返回一个新的引用,否则将使用适当的内容构造一个 Tuples。这等效于 Python 表达式tuple(o)
。
返回该序列或可迭代的* o 作为其他PySequence_Fast*
系列函数可用的对象。如果对象不是序列或不可迭代对象,则以 m *作为消息文本引发TypeError。失败时返回NULL
。
之所以命名PySequence_Fast*
函数是因为它们假定* o 是PyTupleObject或PyListObject并直接访问 o *的数据字段。
作为 CPython 实现的详细信息,如果* o *已经是序列或列表,则将返回它。
Py_ssize_t
PySequence_Fast_GET_SIZE
(PyObject ** o *)- 假设* o 由PySequence_Fast()返回并且 o 不是
NULL
,则返回 o 的长度。也可以pass在 o 上调用PySequence_Size()来获得大小,但是PySequence_Fast_GET_SIZE()更快,因为它可以假定 o *是列表或 Tuples。
- 假设* o 由PySequence_Fast()返回并且 o 不是
PyObject *
PySequence_Fast_GET_ITEM
(PyObject ** o *,Py_ssize_t * i *)- *返回值:借用参考。
假设* o 由PySequence_Fast()返回, o 不是NULL
,并且 i 在范围之内,则返回 o 的第 i *个元素。
- PyObject
PySequence_Fast_ITEMS
(PyObject o *)- 返回 PyObject 指针的基础数组。假设* o 由PySequence_Fast()返回,而 o *不是
NULL
。
- 返回 PyObject 指针的基础数组。假设* o 由PySequence_Fast()返回,而 o *不是
注意,如果调整列表大小,则重新分配可能会重新定位 items 数组。因此,仅在 Sequences 无法更改的上下文中使用基础数组指针。
失败时返回* o 或NULL
的第 i 个元素。 PySequence_GetItem()的形式较快,但无需检查 o *上的PySequence_Check()是否为真,并且无需对负索引进行调整。