迭代器协议
**********

有两个专门用于处理迭代器的函数。

int PyIter_Check(PyObject *o)
    * 属于 稳定 ABI 自 3.8 版起.*

   如果对象 *o* 可以被安全地传给 "PyIter_NextItem()" 则返回非零值，否
   则返回 "0"。此函数总是会成功执行。

int PyAIter_Check(PyObject *o)
    * 属于 稳定 ABI 自 3.10 版起.*

   如果对象 *o* 提供了 "AsyncIterator" 协议则返回非零值，否则返回 "0"
   。此函数总是会成功执行。

   Added in version 3.10.

int PyIter_NextItem(PyObject *iter, PyObject **item)
    * 属于 稳定 ABI 自 3.14 版起.*

   成功时返回 "1" 并将 *item* 设为指向迭代器 *iter* 的下一个值的
   *strong reference*。 如果已没有下一个值则返回 "0" 并将 *item* 设为
   "NULL"。出错时返回 "-1"，将 *item* 设为 "NULL" 并设置一个异常。

   Added in version 3.14.

PyObject *PyIter_Next(PyObject *o)
    *返回值：新的引用。** 属于 稳定 ABI.*

   这是 "PyIter_NextItem()" 的一个较旧版本，它被保留用于向下兼容。推荐
   使用 "PyIter_NextItem()" 函数。

   从迭代器 *o* 返回下一个值。对象必须可被 "PyIter_Check()" 确认为迭代
   器（需要调用方来负责检查）。如果没有剩余的值，则返回 "NULL" 并且不
   设置异常。如果在获取条目时发生了错误，则返回 "NULL" 并且传递异常。

type PySendResult

   用于代表 "PyIter_Send()" 的不同结果的枚举值。

   Added in version 3.10.

PySendResult PyIter_Send(PyObject *iter, PyObject *arg, PyObject **presult)
    * 属于 稳定 ABI 自 3.10 版起.*

   将 *arg* 值发送到迭代器 *iter*。返回：

   * "PYGEN_RETURN"，如果迭代器返回的话。返回值会通过 *presult* 来返回
     。

   * "PYGEN_NEXT"，如果迭代器生成值的话。生成的值会通过 *presult* 来返
     回。

   * "PYGEN_ERROR" if iterator has raised and exception. *presult* is
     set to "NULL".

   Added in version 3.10.
