疊代器協議
**********

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

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_ERROR"。 *presult* 被設定為 "NULL"
     。

   在 3.10 版被加入.
