迭代器类型

Python支持迭代容器的概念。这是使用两种不同的方法实现的; 这些用于允许用户定义的类支持迭代。下面更详细描述的序列总是支持迭代方法。

需要为容器对象定义一个方法以提供迭代支持:

container.__iter__
返回一个迭代器对象。该对象需要支持下面描述的迭代器协议。如果容器支持不同类型的迭代,则可以提供其他方法来专门请求这些迭代类型的迭代器。(支持多种迭代形式的对象的示例是支持广度优先和深度优先遍历的树结构。)此方法对应tp_iter于Python / C API中Python对象的类型结构的 槽。

迭代器对象本身需要支持以下两种方法,它们共同构成迭代器协议

iterator.__iter__
返回迭代器对象本身。这是允许容器和迭代器与forin语句一起使用所必需的。此方法对应tp_iter于Python / C API中Python对象的类型结构的槽。
iterator.__next__
从容器中返回下一个项目。如果没有其他项目,请提出StopIteration异常。此方法对应tp_iternext于Python / C API中Python对象的类型结构的 槽。

Python定义了几个迭代器对象,以支持对一般和特定序列类型,字典和其他更专业的表单的迭代。除了迭代器协议的实现之外,特定类型并不重要。

一旦迭代器的__next__()方法引发 StopIteration,它必须继续在后续调用中这样做。不遵守此属性的实现被视为已损坏。

生成器类型

Python的生成器提供了一种实现迭代器协议的便捷方式。如果容器对象的__iter__()方法被实现为生成器,它将自动返回提供__iter__()__next__() 方法的迭代器对象(技术上,生成器对象)。有关生成器的更多信息可以在yield表达式的文档中找到。