Skip to main content

02-将一个类修改为迭代器

在 Python 中将一个普通的类修改为迭代器,需要在类中实现两个方法:

  1. __iter__ 方法:返回迭代器对象本身(通常是 self)。
  2. __next__ 方法:定义迭代器每次返回的值,并在结束迭代时抛出 StopIteration 异常。

下面是一个简单的示例,该类模拟一个计数器,每次调用 __next__ 方法会返回下一个数字,当达到指定的最大值时停止迭代:

class Counter:
def __init__(self, start, end):
self.current = start
self.end = end

def __iter__(self):
# 返回迭代器对象本身
return self

def __next__(self):
if self.current > self.end:
# 达到上限,抛出 StopIteration 异常
raise StopIteration
else:
result = self.current
self.current += 1
return result


# 使用示例
counter = Counter(1, 5)
from collections.abc import Iterable, Iterator
# 判断 counter 是否是一个可迭代对象
print(isinstance(counter, Iterable))
# 判断 counter 是否是一个迭代器
print(isinstance(counter, Iterator))

if(isinstance(counter, Iterable)):
for number in counter:
print(number)

输出:

True
True
1
2
3
4
5

在这个例子中:

  • __iter__ 方法返回 self,意味着 Counter 对象本身就是一个迭代器。
  • __next__ 方法会返回当前数字,然后将数字自增。当 current 超过 end 时,抛出 StopIteration 异常,从而结束迭代。