元組物件

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 的引用時才有效)。要獲取 強引用,請使用 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 在 除錯模式with assertions 中構建,則邊界檢查將作為斷言執行。

注意

此函式“竊取”對 o 的引用,並且與 PyTuple_SetItem() 不同,它不會丟棄對任何被替換項的引用;元組中 pos 位置的任何引用都將洩漏。

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 版本中新增。

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

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

const char *name

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

const char *doc

指向型別文件字串的指標,或者為 NULL 以省略。

PyStructSequence_Field *fields

指向新型別的欄位名稱的以 NULL 結尾的陣列的指標。

int n_in_sequence

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

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

描述結構序列的欄位。由於結構序列被建模為元組,因此所有欄位的型別都為 PyObject*fields 陣列在 PyStructSequence_Desc 中的索引確定描述結構序列的哪個欄位。

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 的一個例項,該 type 必須使用 PyStructSequence_NewType() 建立。

失敗時返回 NULL 並設定異常。

PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
返回值:借用的引用。屬於 穩定 ABI 的一部分。

返回 p 指向的結構序列中位置 pos 的物件。

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

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 在 除錯模式with assertions 中構建,則邊界檢查將作為斷言執行。

注意

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

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

PyStructSequence_SetItem() 的別名。

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