Tuple(元組)物件¶
-
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 的參照時有效)。若要取得一個 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 指向的元組中介於 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 以 debug mode 或
with assertions建置,則會進行作為斷言(asserting)的邊界檢查。備註
此函式 "竊取" 對 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 原地(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 端可以看到欄位的數目(如果作為元組使用)。
-
const char *name¶
-
type 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¶
- 為 穩定 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 mode 或
with 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 mode 或
with assertions建置,則會進行作為斷言(asserting)的邊界檢查。備註
此函式 "竊取" o 的參照。
-
void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)¶
PyStructSequence_SetItem()的別名。在 3.13 版的變更: 現在是被實作為
PyStructSequence_SetItem()的一個別名。