迭代器
迭代器是一个实现了迭代器协议的容器对象。它基于以下两个方法。
__ next __
:返回容器的下一个元素。
__ iter __
:返回迭代器本身
迭代器可以利用内置的iter函数和一个序列来创建, 假设我们的序列为[1, 2, 3],迭代器创建过程如下:
i = iter([1, 2, 3])
随后我们可以使用next来对迭代器对象进行迭代
但如果序列元素已经被遍历完了,再使用next,就会引发报错
但这一停止方式是与循环语句适配的,所以可以和循环语句搭配使用
for x in iter([1, 2, 3]):print(x)
如果需要创建自己的迭代器,我们需要先创建一个类,在类中需要包含__next__方法和__iter__方法。同时在__next__方法中约定终止条件,终止时需要抛出StopIteration错误。在__iter__方法中需要返回self
下面我们仿照内置iter的形式来创建自己的迭代器
class MyIter():def __init__(self, lst):self.lst = lstself.idx = 0self.len = len(lst)def __next__(self):if self.idx >= self.len:raise StopIterationself.idx += 1return self.lst[self.idx-1]def __iter__(self):return self
最后我们测试一下
for x in MyIter(["a", "b", "c"]):print(x)
可以看到完全一致的效果