疊代器協議

有兩個專門用於疊代器的函式。

int PyIter_Check(PyObject *o)
穩定 ABI 的一部分 自 3.8 版本開始.

Return non-zero if the object o can be safely passed to PyIter_NextItem() and 0 otherwise. This function always succeeds.

int PyAIter_Check(PyObject *o)
穩定 ABI 的一部分 自 3.10 版本開始.

如果物件 o 有提供 AsyncIterator 協議,則回傳非零,否則回傳 0。這個函式一定會執行成功。

在 3.10 版被加入.

int PyIter_NextItem(PyObject *iter, PyObject **item)
穩定 ABI 的一部分 自 3.14 版本開始.

Return 1 and set item to a strong reference of the next value of the iterator iter on success. Return 0 and set item to NULL if there are no remaining values. Return -1, set item to NULL and set an exception on error.

在 3.14 版被加入.

PyObject *PyIter_Next(PyObject *o)
回傳值:新的參照。穩定 ABI 的一部分.

This is an older version of PyIter_NextItem(), which is retained for backwards compatibility. Prefer PyIter_NextItem().

回傳疊代器 o 的下一個值。根據 PyIter_Check(),該物件必須是一個疊代器(由呼叫者檢查)。如果沒有剩餘值,則回傳 NULL 且不設定例外。如果檢索項目時發生錯誤,則回傳 NULL 並傳遞例外。

type PySendResult

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

在 3.10 版被加入.

PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)
穩定 ABI 的一部分 自 3.10 版本開始.

arg 值發送到疊代器 iter 中。回傳:

  • 如果疊代器有回傳則為 PYGEN_RETURN。回傳值透過 presult 回傳。

  • 如果疊代器有產生 (yield) 則為 PYGEN_NEXT。產生值透過 presult 回傳。

  • 如果疊代器引發例外則為 PYGEN_ERRORpresult 被設定為 NULL

在 3.10 版被加入.