1.迭代器
大多数容器对象都可以使用for语句循环:

示例
这种访问方式清晰、简洁、方便。迭代器的使用渗透并统一了Python。在幕后,for语句对容器对象调用iter()。函数返回一个迭代器对象,该对象定义方法__next__(),该方法一次访问一个容器中的元素。当没有更多元素时,__next__()将引发StopIteration异常,该异常将通知for循环终止。您可以使用next()内置函数调用__next__()方法;此示例显示了它的工作原理:

工作原理
了解了迭代器协议背后的机制之后,可以很容易地将迭代器行为添加到类中。定义一个__iter__()方法,用__next__()方法返回一个对象。如果类定义了__next__(),那么__iter__()只能返回self:

示例
2.生成器
生成器是创建迭代器的简单而强大的工具。它们的编写方式与常规函数类似,但只要需要返回数据,就使用yield语句。每次对其调用next()时,生成器都会从停止的位置恢复(它会记住所有数据值以及上次执行的语句)。示例表明,生成器的创建非常简单: