疊代器協定
**********

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

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

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

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 的一部分.*

   這是 "PyIter_NextItem()" 的舊版本，為了向後相容而保留。請優先使用
   "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_ERROR"。 *presult* 被設定為 "NULL"
     。

   在 3.10 版被加入.
