疊代器協定

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

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

如果物件o 可以安全地傳遞給PyIter_NextItem() 則回傳非零 (non-zero),否則回傳 0。這個函式一定會執行成功。

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

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

在 3.10 版被加入.

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

Return1 and setitem to astrong reference of thenext value of the iteratoriter on success.Return0 and setitem toNULL if there are no remaining values.Return-1, setitem toNULL and set an exception on error.

在 3.14 版被加入.

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

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

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

typePySendResult

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

在 3.10 版被加入.

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

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

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

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

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

在 3.10 版被加入.