迭代器对象
**********

Python 提供了两个通用迭代器对象。第一个是序列迭代器，它可与支持
"__getitem__()" 方法的任意序列一起使用。第二个迭代器使用一个可调用对象
和一个哨兵值，为序列中的每个项目调用可调用对象，并在返回哨兵值时结束迭
代。

PyTypeObject PySeqIter_Type
    * 属于 稳定 ABI.*

   由 "PySeqIter_New()" 和内置序列类型的内置函数 "iter()" 的单参数形式
   所返回的迭代器对象的类型对象。

int PySeqIter_Check(PyObject *op)

   如果 *op* 的类型为 "PySeqIter_Type" 则返回真值。此函数总是会成功执
   行。

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

   返回一个与常规序列对象 *seq* 一起使用的迭代器。当序列下标操作引发
   "IndexError" 时，迭代结束。

PyTypeObject PyCallIter_Type
    * 属于 稳定 ABI.*

   由函数 "PyCallIter_New()" 和 "iter()" 内置函数的双参数形式返回的迭
   代器对象类型对象。

int PyCallIter_Check(PyObject *op)

   如果 *op* 的类型为 "PyCallIter_Type" 则返回真值。此函数总是会成功执
   行。

PyObject *PyCallIter_New(PyObject *callable, PyObject *sentinel)
    *返回值：新的引用。** 属于 稳定 ABI.*

   返回一个新的迭代器。第一个参数 *callable* 可以是任何可以在没有参数
   的情况下调用的 Python 可调用对象；每次调用都应该返回迭代中的下一个
   项目。当 *callable* 返回等于 *sentinel* 的值时，迭代将终止。


Range 对象
==========

PyTypeObject PyRange_Type
    * 属于 稳定 ABI.*

   "range" 对象的类型对象。

int PyRange_Check(PyObject *o)

   如果对象 *o* 是 "range" 对象的实例则返回真值。此函数总是会成功执行
   。


内置迭代器类型
==============

这些是包括在 Python 的 C API 中的内置迭代类型，但未提供附加功能。将它
们放在这里是为保持内容完整。

+----------------------------------------------------+----------------------------------------------------+
| C 类型                                             | Python 类型                                        |
|====================================================|====================================================|
| PyTypeObject PyEnum_Type  * 属于 稳定 ABI.*        | "enumerate"                                        |
+----------------------------------------------------+----------------------------------------------------+
| PyTypeObject PyFilter_Type  * 属于 稳定 ABI.*      | "filter"                                           |
+----------------------------------------------------+----------------------------------------------------+
| PyTypeObject PyMap_Type  * 属于 稳定 ABI.*         | "map"                                              |
+----------------------------------------------------+----------------------------------------------------+
| PyTypeObject PyReversed_Type  * 属于 稳定 ABI.*    | "reversed"                                         |
+----------------------------------------------------+----------------------------------------------------+
| PyTypeObject PyZip_Type  * 属于 稳定 ABI.*         | "zip"                                              |
+----------------------------------------------------+----------------------------------------------------+


其他迭代器对象
==============

PyTypeObject PyByteArrayIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyBytesIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyListIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyListRevIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PySetIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyTupleIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyRangeIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyLongRangeIter_Type
    * 属于 稳定 ABI.*

PyTypeObject PyDictIterKey_Type
    * 属于 稳定 ABI.*

PyTypeObject PyDictRevIterKey_Type
    * 属于 稳定 ABI 自 3.8 版起.*

PyTypeObject PyDictIterValue_Type
    * 属于 稳定 ABI.*

PyTypeObject PyDictRevIterValue_Type
    * 属于 稳定 ABI 自 3.8 版起.*

PyTypeObject PyDictIterItem_Type
    * 属于 稳定 ABI.*

PyTypeObject PyDictRevIterItem_Type
    * 属于 稳定 ABI 自 3.8 版起.*

PyTypeObject PyODictIter_Type

   用于多种内置对象的迭代器的类型对象。

   请不要直接创建这些类型的实例；应改为调用 "PyObject_GetIter()"。

   请注意一个给定的内置类型并不保证会使用一个给定的迭代器类型。例如，
   对 "range" 的迭代将根据 range 对象的大小使用两种迭代器类型之一。其
   他类型可能会在未来使用类似的方案，事先不会发出警告。
