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

迭代器有两个函数。

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"，如果迭代器引发异常的话。  *presult* 会被设为
     "NULL"。

   Added in version 3.10.
