迭代器是一个实现了迭代器协议的容器对象。它基于以下两个方法。
__ 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 = lst
self.idx = 0
self.len = len(lst)
def __next__(self):
if self.idx >= self.len:
raise StopIteration
self.idx += 1
return self.lst[self.idx-1]
def __iter__(self):
return self
最后我们测试一下
for x in MyIter(["a", "b", "c"]):
print(x)
可以看到完全一致的效果