Tuple(元組)物件

type PyTupleObject

PyObject 子型別代表 Python 元組物件

PyTypeObject PyTuple_Type
穩定 ABI 的一部分.

PyTypeObject 實例代表 Python 元組型別,與 Python 層中的 tuple 是同一物件

int PyTuple_Check(PyObject *p)

如果 p 為一元組物件或是元組型別的子型別實例時回傳 true。此函式總會執行成功

int PyTuple_CheckExact(PyObject *p)

如果 p 為一元組物件但不是元組型別的子型別實例時回傳 true。此函式總會執行成功

PyObject *PyTuple_New(Py_ssize_t len)
回傳值:新的參照。穩定 ABI 的一部分.

回傳一個長度為 len 的新元組物件,失敗會時回傳 NULL 並設定例外。

PyObject *PyTuple_Pack(Py_ssize_t n, ...)
回傳值:新的參照。穩定 ABI 的一部分.

回傳一個長度為 n 的新元組物件,失敗時會回傳 NULL 並設定例外。元組值被初始化為指向 Python 物件的接續 n 個 C 引數。PyTuple_Pack(2, a, b) 等價於 Py_BuildValue("(OO)", a, b)

Py_ssize_t PyTuple_Size(PyObject *p)
穩定 ABI 的一部分.

拿取一個元組物件的指標,然後回傳此元組的大小。錯誤發生時,回傳 -1 並設定例外。

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)

就像 PyTuple_Size() 但沒有錯誤檢查。

PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
回傳值:借用參照。穩定 ABI 的一部分.

回傳 p 指向的元組中位置 pos 處的物件。如果 pos 為負數或超出範圍,回傳 NULL 並設定 IndexError 例外。

回傳的參照借自元組 p(也就是說:它僅在你持有 p 的參照時有效)。若要取得一個 strong reference,請使用 Py_NewRef(PyTuple_GetItem(...))PySequence_GetItem()

PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
回傳值:借用參照。

PyTuple_GetItem() 相似,但不檢查其引數。

PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
回傳值:新的參照。穩定 ABI 的一部分.

回傳由 p 指向的元組中介於 lowhigh 之間的切片或在錯誤時回傳 NULL 並設定例外。

這與 Python p[low:high] 運算式等價。但不支援從元組末端開始索引。

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
穩定 ABI 的一部分.

p 指向的元組 pos 位置處插入對物件 o 的參照。成功時回傳 0,如果 pos 超出邊界則回傳 -1,並設定 IndexError 例外。

備註

此函式 "竊取" 對 o 的參照,並丟棄對元組中受影響位置的項目的參照。

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)

PyTuple_SetItem() 相似,但不進行錯誤檢查,且應 用於填充全新的元組。

若 Python 以 debug modewith assertions 建置,則會進行作為斷言(asserting)的邊界檢查。

備註

此函式 "竊取" 對 o 的參照,且與 PyTuple_SetItem() 不同的是,此函式並 丟棄任何被替代項目的參照;元組中 pos 位置的所有參照皆會被洩漏。

警告

此巨集應 用於新建立的元組。在正被使用中的元組(或換句話說,參照計數大於 1 的元組)上使用此巨集可能會導致未定義行為。

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

可用於調整元組的大小。newsize 將是元組的新長度。由於元組 應該 是不可變的,因此僅當物件只有一個參照時才應使用此方法。如果程式碼的其他部分已經知道該元組,則 不要 使用此方法。最終元組總會變大或縮小。可以將其理解為銷毀舊元組並建立一個新元組,只是有著更高的效率。成功時回傳 0。用戶端程式碼絕不應假設 *p 的結果值與呼叫此函式之前的值相同。如果 *p 參照的物件被替換,則原始的 *p 將被銷毀。失敗時,回傳 -1,並將 *p 設定為 NULL,並引發 MemoryErrorSystemError 例外。

結構序列物件

結構序列物件是 namedtuple() 物件在 C 語言中的等價,換言之,一個序列的元素也可以透過屬性存取。要建立結構序列,首先需要建立特定的結構序列型別。

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
回傳值:新的參照。穩定 ABI 的一部分.

desc 中的資料建立一個新的結構序列型別,如下所述。可以使用 PyStructSequence_New() 以建立產生結構序列型別的實例。

失敗時回傳 NULL 並設定例外。

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)

desc 原地(in place)初始化結構序列型別 type

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

PyStructSequence_InitType() 相似,但運行成功時回傳 0,運行失敗時回傳 -1 並設定例外。

在 3.4 版被加入.

type PyStructSequence_Desc
穩定 ABI 的一部分 (包含所有成員).

包含要建立的結構序列化型別的中介資訊(meta information)。

const char *name

型別的完整限定名稱(Fully qualified name);以 UTF-8 編碼並以空字元結尾。名稱必須包含完整的模組名稱。

const char *doc

指向型別說明文件(docstring)的指標或使用 NULL 表示忽略。

PyStructSequence_Field *fields

指向一個以 NULL 結尾的陣列指標,其包含新型別的欄位名稱。

int n_in_sequence

Python 端可以看到欄位的數目(如果作為元組使用)。

type PyStructSequence_Field
穩定 ABI 的一部分 (包含所有成員).

描述結構序列的一個欄位。由於結構序列以元組作為原型,所有欄位的型別均為 PyObject*PyStructSequence_Descfields 陣列中的索引決定了描述的是結構序列的哪個欄位。

const char *name

欄位名稱,或 NULL 表示命名欄位串列結束,設定為 PyStructSequence_UnnamedField 表示該欄位不命名。

const char *doc

欄位說明字串或為 NULL 表示忽略。

const char *const PyStructSequence_UnnamedField
穩定 ABI 的一部分 自 3.11 版本開始.

給定欄位名稱一個特別值,表示該欄位不命名。

在 3.9 版的變更: 型別原本是 char *,現已被修改。

PyObject *PyStructSequence_New(PyTypeObject *type)
回傳值:新的參照。穩定 ABI 的一部分.

建立 type 的實例,必須以 PyStructSequence_NewType() 建立。

失敗時回傳 NULL 並設定例外。

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
回傳值:借用參照。穩定 ABI 的一部分.

回傳結構序列中由 p 指向 pos 處的物件。

若 Python 以 debug modewith assertions 建置,則會進行作為斷言(asserting)的邊界檢查。

PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
回傳值:借用參照。

PyStructSequence_GetItem() 的別名。

在 3.13 版的變更: 現在是被實作為 PyStructSequence_GetItem() 的一個別名。

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
穩定 ABI 的一部分.

將結構序列 p 中索引 pos 處的欄位值設為 o。與 PyTuple_SET_ITEM() 類似,此函式僅套用於填充全新實例。

若 Python 以 debug modewith assertions 建置,則會進行作為斷言(asserting)的邊界檢查。

備註

此函式 "竊取" o 的參照。

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)

PyStructSequence_SetItem() 的別名。

在 3.13 版的變更: 現在是被實作為 PyStructSequence_SetItem() 的一個別名。