元組物件¶
-
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()
,但不執行錯誤檢查,並且應該僅用於填充全新的元組。如果 Python 在 除錯模式 或
with assertions
中構建,則邊界檢查將作為斷言執行。注意
此函式“竊取”對 o 的引用,並且與
PyTuple_SetItem()
不同,它不會丟棄對任何被替換項的引用;元組中 pos 位置的任何引用都將洩漏。
-
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 版本中新增。
-
type PyStructSequence_Desc¶
- 穩定 ABI 的一部分(包括所有成員)。
包含要建立的結構序列型別的元資訊。
-
const char *name¶
型別的完全限定名稱;以 null 結尾的 UTF-8 編碼。該名稱必須包含模組名稱。
-
const char *doc¶
指向型別文件字串的指標,或者為
NULL
以省略。
-
PyStructSequence_Field *fields¶
指向新型別的欄位名稱的以
NULL
結尾的陣列的指標。
-
int n_in_sequence¶
Python 端可見的欄位數(如果用作元組)。
-
const char *name¶
-
type PyStructSequence_Field¶
- 穩定 ABI 的一部分(包括所有成員)。
描述結構序列的欄位。由於結構序列被建模為元組,因此所有欄位的型別都為 PyObject*。
fields
陣列在PyStructSequence_Desc
中的索引確定描述結構序列的哪個欄位。-
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 的一個例項,該 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()
的別名實現。