序列協議¶
-
int PySequence_Check(PyObject *o)¶
- 屬於穩定 ABI的一部分。
如果物件提供序列協議,則返回
1
,否則返回0
。請注意,對於具有__getitem__()
方法的 Python 類,它會返回1
,除非它們是dict
子類,因為通常無法確定該類支援的鍵型別。此函式始終成功。
-
Py_ssize_t PySequence_Size(PyObject *o)¶
-
Py_ssize_t PySequence_Length(PyObject *o)¶
- 屬於穩定 ABI的一部分。
成功時返回序列 *o* 中的物件數量,失敗時返回
-1
。這等效於 Python 表示式len(o)
。
-
PyObject *PySequence_Concat(PyObject *o1, PyObject *o2)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
成功時返回 *o1* 和 *o2* 的串聯,失敗時返回
NULL
。這等效於 Python 表示式o1 + o2
。
-
PyObject *PySequence_Repeat(PyObject *o, Py_ssize_t count)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回將序列物件 *o* 重複 *count* 次的結果,失敗時返回
NULL
。這等效於 Python 表示式o * count
。
-
PyObject *PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
成功時返回 *o1* 和 *o2* 的串聯,失敗時返回
NULL
。當 *o1* 支援時,該操作是 *就地* 完成的。這等效於 Python 表示式o1 += o2
。
-
PyObject *PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回將序列物件 *o* 重複 *count* 次的結果,失敗時返回
NULL
。當 *o* 支援時,該操作是 *就地* 完成的。這等效於 Python 表示式o *= count
。
-
PyObject *PySequence_GetItem(PyObject *o, Py_ssize_t i)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回 *o* 的第 *i* 個元素,失敗時返回
NULL
。這等效於 Python 表示式o[i]
。
-
PyObject *PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回序列物件 *o* 中 *i1* 和 *i2* 之間的切片,失敗時返回
NULL
。這等效於 Python 表示式o[i1:i2]
。
-
int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)¶
- 屬於穩定 ABI的一部分。
將物件 *v* 賦值給 *o* 的第 *i* 個元素。失敗時引發異常並返回
-1
;成功時返回0
。這等效於 Python 語句o[i] = v
。此函式 *不會* 竊取對 *v* 的引用。如果 *v* 是
NULL
,則會刪除該元素,但此功能已棄用,建議使用PySequence_DelItem()
。
-
int PySequence_DelItem(PyObject *o, Py_ssize_t i)¶
- 屬於穩定 ABI的一部分。
刪除物件 *o* 的第 *i* 個元素。失敗時返回
-1
。這等效於 Python 語句del o[i]
。
-
int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)¶
- 屬於穩定 ABI的一部分。
將序列物件 v 賦值給序列物件 o 中從 i1 到 i2 的切片。這等價於 Python 語句
o[i1:i2] = v
。
-
int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)¶
- 屬於穩定 ABI的一部分。
刪除序列物件 o 中從 i1 到 i2 的切片。失敗時返回
-1
。這等價於 Python 語句del o[i1:i2]
。
-
Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)¶
- 屬於穩定 ABI的一部分。
返回 value 在 o 中出現的次數,也就是返回滿足
o[key] == value
的鍵的數量。失敗時,返回-1
。這等價於 Python 表示式o.count(value)
。
-
int PySequence_Contains(PyObject *o, PyObject *value)¶
- 屬於穩定 ABI的一部分。
確定 o 是否包含 value。如果 o 中的某個項等於 value,則返回
1
,否則返回0
。發生錯誤時,返回-1
。這等價於 Python 表示式value in o
。
-
Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)¶
- 屬於穩定 ABI的一部分。
返回滿足
o[i] == value
的第一個索引 i。發生錯誤時,返回-1
。這等價於 Python 表示式o.index(value)
。
-
PyObject *PySequence_List(PyObject *o)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回一個列表物件,其內容與序列或可迭代物件 o 相同,或者在失敗時返回
NULL
。返回的列表保證是新的。這等價於 Python 表示式list(o)
。
-
PyObject *PySequence_Tuple(PyObject *o)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
返回一個元組物件,其內容與序列或可迭代物件 o 相同,或者在失敗時返回
NULL
。如果 o 是一個元組,則會返回一個新的引用,否則將構造一個具有適當內容的元組。這等價於 Python 表示式tuple(o)
。
-
PyObject *PySequence_Fast(PyObject *o, const char *m)¶
- 返回值:新引用。屬於穩定 ABI的一部分。
將序列或可迭代物件 o 返回為可供其他
PySequence_Fast*
函式系列使用的物件。如果該物件不是序列或可迭代物件,則會引發TypeError
,並使用 m 作為訊息文字。失敗時返回NULL
。之所以將
PySequence_Fast*
函式這樣命名,是因為它們假定 o 是一個PyTupleObject
或一個PyListObject
,並且直接訪問 o 的資料欄位。作為 CPython 實現的細節,如果 o 已經是一個序列或列表,則會直接返回它。
-
Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)¶
返回 o 的長度,假設 o 是由
PySequence_Fast()
返回的,並且 o 不是NULL
。也可以透過在 o 上呼叫PySequence_Size()
來檢索大小,但是PySequence_Fast_GET_SIZE()
更快,因為它假設 o 是列表或元組。
-
PyObject *PySequence_Fast_GET_ITEM(PyObject *o, Py_ssize_t i)¶
- 返回值:借用引用。
返回 o 的第 i 個元素,假設 o 是由
PySequence_Fast()
返回的,o 不是NULL
,並且 i 在邊界內。
-
PyObject **PySequence_Fast_ITEMS(PyObject *o)¶
返回 PyObject 指標的底層陣列。假設 o 是由
PySequence_Fast()
返回的,並且 o 不是NULL
。請注意,如果列表調整了大小,重新分配可能會重新定位項陣列。因此,只能在序列無法更改的上下文中使用底層陣列指標。
-
PyObject *PySequence_ITEM(PyObject *o, Py_ssize_t i)¶
- 返回值:新引用。
返回 o 的第 i 個元素,如果失敗則返回
NULL
。它是PySequence_GetItem()
的更快形式,但不會檢查 o 上PySequence_Check()
是否為真,也不會調整負索引。