元組物件¶
-
PyTypeObject PyTuple_Type¶
- 作為 穩定 ABI 的一部分。
這個
PyTypeObject
例項表示 Python 元組型別;它與 Python 層中的tuple
物件相同。
-
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 所指向元組中 low 和 high 之間的切片,如果失敗則返回
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
,並引發MemoryError
或SystemError
。
結構序列物件¶
結構序列物件是 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 側可見的欄位數量(如果用作元組)。
-
const char *name¶
-
型別 PyStructSequence_Field¶
- 穩定 ABI 的一部分(包括所有成員)。
描述結構序列的一個欄位。由於結構序列被建模為元組,所有欄位都被型別化為 PyObject*。
PyStructSequence_Desc
的fields
陣列中的索引決定了哪個結構序列欄位被描述。-
const char *name¶
欄位名稱,或
NULL
表示結束命名欄位列表,設定為PyStructSequence_UnnamedField
表示不命名。
-
const char *doc¶
欄位文件字串,或
NULL
表示省略。
-
const char *name¶
-
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()
的別名實現。