# 序列协议

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)``表达式.

PyObject* `PySequence_Concat`(PyObject *o1, PyObject *o2)
  Return value: New reference.

  Return the concatenation of o1 and o2 on success, and NULL on failure. This is the equivalent of the Python expression `o1 + o2`.

PyObject* `PySequence_Repeat`(PyObject *o, Py_ssize_t count)
  Return value: New reference.

  Return the result of repeating sequence object o count times, or NULL on failure. This is the equivalent of the Python expression `o * count`.

PyObject* `PySequence_InPlaceConcat`(PyObject *o1, PyObject *o2)
  Return value: New reference.

  Return the concatenation of o1 and o2 on success, and NULL on failure. The operation is done in-place when o1 supports it. This is the equivalent of the Python expression `o1 += o2`.

PyObject* `PySequence_InPlaceRepeat`(PyObject *o, Py_ssize_t count)
  Return value: New reference.

  Return the result of repeating sequence object o count times, or NULL on failure. The operation is done in-place when o supports it. This is the equivalent of the Python expression `o *= count`.

PyObject* `PySequence_GetItem`(PyObject *o, Py_ssize_t i)
  Return value: New reference.

  Return the ith element of o, or NULL on failure. This is the equivalent of the Python expression `o[i]`.

PyObject* `PySequence_GetSlice`(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
  Return value: New reference.

  Return the slice of sequence object o between i1 and i2, or NULL on failure. This is the equivalent of the Python expression `o[i1:i2]`.

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

  将对象 v 赋值给 o 的第 i 号元素。 失败时会引发异常并返回 `-1`；成功时返回 `0`。 这相当于 Python 语句 `o[i] = v`。 此函数 不会 改变对 v 的引用。

  If v is NULL, the element is deleted, however this feature is deprecated in favour of using `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)

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

Py_ssize_t `PySequence_Count`(PyObject *o, PyObject *value)

  返回 value 在 o 中出现的次数，即返回使得 `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)

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

PyObject* `PySequence_List`(PyObject *o)
  Return value: New reference.

  Return a list object with the same contents as the sequence or iterable o, or NULL on failure. The returned list is guaranteed to be new. This is equivalent to the Python expression `list(o)`.

PyObject* `PySequence_Tuple`(PyObject *o)
  Return value: New reference.

  Return a tuple object with the same contents as the sequence or iterable o, or NULL on failure. If o is a tuple, a new reference will be returned, otherwise a tuple will be constructed with the appropriate contents. This is equivalent to the Python expression `tuple(o)`.

PyObject* `PySequence_Fast`(PyObject *o, const char *m)
  Return value: New reference.

  Return the sequence or iterable o as a list, unless it is already a tuple or list, in which case o is returned. Use `PySequence_Fast_GET_ITEM()` to access the members of the result. Returns NULL on failure. If the object is not a sequence or iterable, raises `TypeError` with m as the message text.

Py_ssize_t `PySequence_Fast_GET_SIZE`(PyObject *o)

  Returns the length of o, assuming that o was returned by `PySequence_Fast()` and that o is not NULL. The size can also be gotten by calling `PySequence_Size()` on o, but `PySequence_Fast_GET_SIZE()` is faster because it can assume o is a list or tuple.

PyObject* `PySequence_Fast_GET_ITEM`(PyObject *o, Py_ssize_t i)
  Return value: Borrowed reference.

  Return the ith element of o, assuming that o was returned by `PySequence_Fast()`, o is not NULL, and that i is within bounds.

PyObject** `PySequence_Fast_ITEMS`(PyObject *o)

  Return the underlying array of PyObject pointers. Assumes that o was returned by `PySequence_Fast()` and o is not NULL.

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

PyObject* `PySequence_ITEM`(PyObject *o, Py_ssize_t i)
  Return value: New reference.

  Return the ith element of o or NULL on failure. Macro form of `PySequence_GetItem()` but without checking that `PySequence_Check()` on o is true and without adjustment for negative indices.