Sequence Protocol

  • int PySequence_Check(PyObject ** o *)

    • 如果对象提供序列协议,则返回1,否则返回0。请注意,对于具有getitem()方法的 Python 类,它将返回1,除非它们是dict子类,因为在一般情况下无法确定其支持的键类型。此Function始终成功。
  • Py_ssize_t PySequence_Size(PyObject ** o *)

  • Py_ssize_t PySequence_Length(PyObject ** o *)

    • 如果成功,则按 Sequences 返回对象* o *,如果失败则返回-1。这等效于 Python 表达式len(o)

成功时返回* o1 o2 *的串联,失败时返回NULL。这等效于 Python 表达式o1 + o2

  • PyObject * PySequence_Repeat(PyObject ** o *,Py_ssize_t * count *)
    • 返回值:新参考.

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

成功时返回* o1 o2 的串联,失败时返回NULL。如果 o1 *支持,则操作就地完成。这等效于 Python 表达式o1 += o2

  • PyObject * PySequence_InPlaceRepeat(PyObject ** o *,Py_ssize_t * count *)
    • 返回值:新参考.

返回重复序列对象* o * * count 次的结果,如果失败则返回NULL。当 o *支持时,该操作“就地”完成。这等效于 Python 表达式o *= count

  • PyObject * PySequence_GetItem(PyObject ** o *,Py_ssize_t * i *)
    • 返回值:新参考.

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

  • PyObject * PySequence_GetSlice(PyObject ** o *,Py_ssize_t * i1 *,Py_ssize_t * i2 *)
    • 返回值:新参考.

返回序列对象* 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 *为NULL,则删除该元素,但是不建议使用此Function,而推荐使用PySequence_DelItem()

  • int PySequence_DelItem(PyObject ** o *,Py_ssize_t * i *)

    • 删除对象* o 的第 i *个元素。失败时返回-1。这等效于 Python 语句del 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
  • int PySequence_DelSlice(PyObject ** o *,Py_ssize_t * i1 *,Py_ssize_t * i2 *)

    • 从* i1 i2 删除序列对象 o *中的切片。失败时返回-1。这等效于 Python 语句del o[i1:i2]
  • Py_ssize_t PySequence_Count(PyObject *o PyObject value *)

    • 返回* o value *的出现次数,即返回o[key] == value的键的数目。失败时,返回-1。这等效于 Python 表达式o.count(value)
  • int PySequence_Contains(PyObject *o PyObject value *)

    • 确定* o 是否包含 value 。如果 o 中的项等于 value *,则返回1,否则返回0。出错时,返回-1。这等效于 Python 表达式value in o
  • 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)

  • PyObject * PySequence_Fast(PyObject *o ,const char m *)
    • 返回值:新参考.

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

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

作为 CPython 实现的详细信息,如果* o *已经是序列或列表,则将返回它。

假设* o PySequence_Fast()返回, o 不是NULL,并且 i 在范围之内,则返回 o 的第 i *个元素。

注意,如果调整列表大小,则重新分配可能会重新定位 items 数组。因此,仅在 Sequences 无法更改的上下文中使用基础数组指针。

  • PyObject * PySequence_ITEM(PyObject ** o *,Py_ssize_t * i *)
    • 返回值:新参考.

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