元組物件

型別 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 的引用時有效)。要獲取一個 強引用,請使用 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() 類似,但不對其引數進行錯誤檢查,並且 應用於填充全新的元組。

如果在 除錯模式with assertions 下構建 Python,則會執行邊界檢查作為斷言。

備註

此函式“竊取”對 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 就地初始化結構序列型別 type

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

PyStructSequence_InitType() 類似,但成功時返回 0,失敗時返回 -1 並設定異常。

在 3.4 版本加入。

型別 PyStructSequence_Desc
穩定 ABI 的一部分(包括所有成員)。

包含要建立的結構序列型別的元資訊。

const char *name

型別的完全限定名稱;以空字元結尾的 UTF-8 編碼。名稱必須包含模組名。

const char *doc

指向該型別文件字串的指標,或 NULL 表示省略。

PyStructSequence_Field *fields

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

int n_in_sequence

Python 側可見的欄位數量(如果用作元組)。

型別 PyStructSequence_Field
穩定 ABI 的一部分(包括所有成員)。

描述結構序列的一個欄位。由於結構序列被建模為元組,所有欄位都被型別化為 PyObject*PyStructSequence_Descfields 陣列中的索引決定了哪個結構序列欄位被描述。

const char *name

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

const char *doc

欄位文件字串,或 NULL 表示省略。

const char *const PyStructSequence_UnnamedField
自 3.11 版起成為 穩定 ABI 的一部分。

欄位名稱的特殊值,表示不命名。

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 的物件。

如果在 除錯模式with assertions 下構建 Python,則會執行邊界檢查作為斷言。

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() 類似,這隻應用於填充全新的例項。

如果在 除錯模式with assertions 下構建 Python,則會執行邊界檢查作為斷言。

備註

此函式“竊取”對 o 的引用。

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

PyStructSequence_SetItem() 的別名。

3.13 版本中已變更: 現在作為 PyStructSequence_SetItem() 的別名實現。