# 疊代器協定

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

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` if iterator has raised an exception. presult is set to `NULL`.

  在 3.10 版被加入.