Python语言里迭代器是一种非常重要的工具,它允许程序员轻松地遍历并访问一个集合中的每个元素。Python语言中自带了很多类型的迭代器,我们也可以根据自己的需求定义自己的迭代器类,这篇文章将简单介绍迭代器类的定义和使用。
class MyIterator: def __init__(self, data): self.index = 0 self.data = data def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration result = self.data[self.index] self.index += 1 return result
以上是一个简单的自定义迭代器类,我们可以看到,一个迭代器必须包含两个方法,一个是__iter__()方法,它返回迭代器对象本身;另一个是__next__()方法,它返回下一个元素的值。在这个例子中,我们定义了一个名为index的变量,用于追踪迭代器的位置,如果当前位置超出了数据结构的长度,则抛出StopIteration异常。
data = [1,2,3,4,5] my_iterator = MyIterator(data) for element in my_iterator: print(element)
使用自定义迭代器类和Python内置函数,我们可以很容易地遍历一个列表,如上面的代码所示。固定格式的for循环会调用MyIterator类的__iter__()方法,并从中获取迭代器对象,接下来,for循环就调用__next__()方法以获取每个元素的值,直到达到列表的末尾并抛出异常为止。
class DaysIterator: def __init__(self): self.days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.days): self.index = 0 result = self.days[self.index] self.index += 1 return result days_iterator = DaysIterator() for day in days_iterator: print(day)
除了对列表进行迭代以外,我们还可以编写自定义迭代器以遍历任何数据结构。例如,这个自定义迭代器类可以遍历一周中的所有日子,然后循环回到那一周的第一天。迭代器类使用了两个实例变量,一个是字符串表示一周中的所有日子,另一个是index表示迭代器的位置。同样的,当索引到达日历的末尾时,迭代器类将从头开始迭代。