Tuple(元組)物件¶
- PyTypeObjectPyTuple_Type¶
- 為穩定 ABI 的一部分.
此
PyTypeObject實例代表 Python 元組型別,與 Python 層中的tuple是同一物件
- PyObject*PyTuple_New(Py_ssize_tlen)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
回傳一個長度為len 的新元組物件,失敗會時回傳
NULL並設定例外。
- PyObject*PyTuple_Pack(Py_ssize_tn,...)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
回傳一個長度為n 的新元組物件,失敗時會回傳
NULL並設定例外。元組值被初始化為指向 Python 物件的接續n 個 C 引數。PyTuple_Pack(2,a,b)等價於Py_BuildValue("(OO)",a,b)。
- Py_ssize_tPyTuple_Size(PyObject*p)¶
- 為穩定 ABI 的一部分.
拿取一個元組物件的指標,然後回傳此元組的大小。錯誤發生時,回傳
-1並設定例外。
- Py_ssize_tPyTuple_GET_SIZE(PyObject*p)¶
就像
PyTuple_Size()但沒有錯誤檢查。
- PyObject*PyTuple_GetItem(PyObject*p,Py_ssize_tpos)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
回傳p 指向的元組中位置pos 處的物件。如果pos 為負數或超出範圍,回傳
NULL並設定IndexError例外。回傳的參照借自元組p(也就是說:它僅在你持有p 的參照時有效)。若要取得一個strong reference,請使用
Py_NewRef(PyTuple_GetItem(...))或PySequence_GetItem()。
- PyObject*PyTuple_GET_ITEM(PyObject*p,Py_ssize_tpos)¶
- 回傳值:借用參照。
與
PyTuple_GetItem()相似,但不檢查其引數。
- PyObject*PyTuple_GetSlice(PyObject*p,Py_ssize_tlow,Py_ssize_thigh)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
回傳由p 指向的元組中介於low 和high 之間的切片或在錯誤時回傳
NULL並設定例外。這與 Python
p[low:high]運算式等價。但不支援從元組末端開始索引。
- intPyTuple_SetItem(PyObject*p,Py_ssize_tpos,PyObject*o)¶
- 為穩定 ABI 的一部分.
於p 指向的元組pos 位置處插入對物件o 的參照。成功時回傳
0,如果pos 超出邊界則回傳-1,並設定IndexError例外。備註
此函式 "竊取" 對o 的參照,並丟棄對元組中受影響位置的項目的參照。
- voidPyTuple_SET_ITEM(PyObject*p,Py_ssize_tpos,PyObject*o)¶
與
PyTuple_SetItem()相似,但不進行錯誤檢查,且應只 用於填充全新的元組。若 Python 以debug mode 或
withassertions建置,則會進行作為斷言(asserting)的邊界檢查。備註
此函式 "竊取" 對o 的參照,且與
PyTuple_SetItem()不同的是,此函式並不 丟棄任何被替代項目的參照;元組中pos 位置的所有參照皆會被洩漏。警告
此巨集應僅 用於新建立的元組。在正被使用中的元組(或換句話說,參照計數大於 1 的元組)上使用此巨集可能會導致未定義行為。
- int_PyTuple_Resize(PyObject**p,Py_ssize_tnewsize)¶
可用於調整元組的大小。newsize 將是元組的新長度。由於元組應該 是不可變的,因此僅當物件只有一個參照時才應使用此方法。如果程式碼的其他部分已經知道該元組,則不要 使用此方法。最終元組總會變大或縮小。可以將其理解為銷毀舊元組並建立一個新元組,只是有著更高的效率。成功時回傳
0。用戶端程式碼絕不應假設*p的結果值與呼叫此函式之前的值相同。如果*p參照的物件被替換,則原始的*p將被銷毀。失敗時,回傳-1,並將*p設定為NULL,並引發MemoryError或SystemError例外。
結構序列物件¶
結構序列物件是namedtuple() 物件在 C 語言中的等價,換言之,一個序列的元素也可以透過屬性存取。要建立結構序列,首先需要建立特定的結構序列型別。
- PyTypeObject*PyStructSequence_NewType(PyStructSequence_Desc*desc)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
從desc 中的資料建立一個新的結構序列型別,如下所述。可以使用
PyStructSequence_New()以建立產生結構序列型別的實例。失敗時回傳
NULL並設定例外。
- voidPyStructSequence_InitType(PyTypeObject*type,PyStructSequence_Desc*desc)¶
從desc 原地(in place)初始化結構序列型別type。
- intPyStructSequence_InitType2(PyTypeObject*type,PyStructSequence_Desc*desc)¶
與
PyStructSequence_InitType()相似,但運行成功時回傳0,運行失敗時回傳-1並設定例外。在 3.4 版被加入.
- typePyStructSequence_Desc¶
- 為穩定 ABI 的一部分 (包含所有成員).
包含要建立的結構序列化型別的中介資訊(meta information)。
- constchar*name¶
型別的完整限定名稱(Fully qualified name);以 UTF-8 編碼並以空字元結尾。名稱必須包含完整的模組名稱。
- constchar*doc¶
指向型別說明文件(docstring)的指標或使用
NULL表示忽略。
- PyStructSequence_Field*fields¶
指向一個以
NULL結尾的陣列指標,其包含新型別的欄位名稱。
- intn_in_sequence¶
Python 端可以看到欄位的數目(如果作為元組使用)。
- constchar*name¶
- typePyStructSequence_Field¶
- 為穩定 ABI 的一部分 (包含所有成員).
描述結構序列的一個欄位。由於結構序列以元組作為原型,所有欄位的型別均為PyObject*。
PyStructSequence_Desc在fields陣列中的索引決定了描述的是結構序列的哪個欄位。- constchar*name¶
欄位名稱,或
NULL表示命名欄位串列結束,設定為PyStructSequence_UnnamedField表示該欄位不命名。
- constchar*doc¶
欄位說明字串或為
NULL表示忽略。
- constchar*name¶
- constchar*constPyStructSequence_UnnamedField¶
- 為穩定 ABI 的一部分 自 3.11 版本開始.
給定欄位名稱一個特別值,表示該欄位不命名。
在 3.9 版的變更:型別原本是
char*,現已被修改。
- PyObject*PyStructSequence_New(PyTypeObject*type)¶
- 回傳值:新的參照。 為穩定 ABI 的一部分.
建立type 的實例,必須以
PyStructSequence_NewType()建立。失敗時回傳
NULL並設定例外。
- PyObject*PyStructSequence_GetItem(PyObject*p,Py_ssize_tpos)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
回傳結構序列中由p 指向pos 處的物件。
若 Python 以debug mode 或
withassertions建置,則會進行作為斷言(asserting)的邊界檢查。
- PyObject*PyStructSequence_GET_ITEM(PyObject*p,Py_ssize_tpos)¶
- 回傳值:借用參照。
PyStructSequence_GetItem()的別名。在 3.13 版的變更:現在是被實作為
PyStructSequence_GetItem()的一個別名。
- voidPyStructSequence_SetItem(PyObject*p,Py_ssize_tpos,PyObject*o)¶
- 為穩定 ABI 的一部分.
將結構序列p 中索引pos 處的欄位值設為o。與
PyTuple_SET_ITEM()類似,此函式僅套用於填充全新實例。若 Python 以debug mode 或
withassertions建置,則會進行作為斷言(asserting)的邊界檢查。備註
此函式 "竊取"o 的參照。
- voidPyStructSequence_SET_ITEM(PyObject*p,Py_ssize_t*pos,PyObject*o)¶
PyStructSequence_SetItem()的別名。在 3.13 版的變更:現在是被實作為
PyStructSequence_SetItem()的一個別名。