迭代器的定义
实现了迭代器协议的容器对象就是迭代器。
只需要实现下面两个方法:
__next__: #返回容器的下一个元素
__iter__: #返回迭代器本身
示例:
上面例子中,基于列表[1,2,3]创建了一个迭代器i,每次调用next(i)时,就返回一个列表中的元素。第三次调用后,已经达到了列表的末尾,所以再次调用next就报出了StopIteration异常。这样的方式就可以很方便的使用for循环。常见的list、set、dict对象,都是基于这样的实现思路。
自定义迭代器
新建一个class,实现__next__和__iter__方法,就可以让class具有迭代器。
示例:
class MyIter:
def __init__(self, s):
self.s = s
def __next__(self):
"""返回下一个元素"""
if self.s <= 0:
raise StopIteration
self.s -= 1
return self.s
def __iter__(self):
"""返回迭代器对象"""
return self
运行结果:
一般情况下,我们直接使用python提供的容器对象,内部已经实现了迭代器。如果我们需要让自己的类具有可迭代性,可以参考上面的方法实现。