迭代器協議

有兩個專門用於處理迭代器的函式。

int PyIter_Check(PyObject *o)
自 3.8 版本以來,作為穩定 ABI 的一部分。

如果物件 o 可以安全地傳遞給 PyIter_NextItem(),則返回非零值;否則返回 0。此函式總是成功的。

int PyAIter_Check(PyObject *o)
自 3.10 版本以來,作為 穩定 ABI 的一部分。

如果物件 o 提供了 AsyncIterator 協議,則返回非零值;否則返回 0。此函式總是成功的。

在 3.10 版本加入。

int PyIter_NextItem(PyObject *iter, PyObject **item)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

成功時返回 1 並將 item 設定為迭代器 iter 的下一個值的強引用。如果沒有剩餘的值,則返回 0 並將 item 設定為 NULL。如果發生錯誤,則返回 -1,將 item 設定為 NULL 並設定一個異常。

在 3.14 版本加入。

PyObject *PyIter_Next(PyObject *o)
返回值: 新引用。 穩定ABI 的一部分。

這是 PyIter_NextItem() 的舊版本,為了向後相容而保留。請優先使用 PyIter_NextItem()

返回迭代器 o 的下一個值。根據 PyIter_Check(),該物件必須是一個迭代器(由呼叫者負責檢查)。如果沒有剩餘的值,則返回 NULL 且不設定異常。如果在獲取項時發生錯誤,則返回 NULL 並傳遞異常。

type PySendResult

用於表示 PyIter_Send() 不同結果的列舉值。

在 3.10 版本加入。

PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)
自 3.10 版本以來,作為 穩定 ABI 的一部分。

arg 值傳送到迭代器 iter 中。返回

  • 如果迭代器返回,則為 PYGEN_RETURN。返回值透過 presult 返回。

  • 如果迭代器生成值,則為 PYGEN_NEXT。生成的值透過 presult 返回。

  • 如果迭代器引發異常,則為 PYGEN_ERRORpresult 設定為 NULL

在 3.10 版本加入。