在__iter__函数中将使__next__
中的StopIteration raise的条件归
零,则可以循环迭代实例。
eg:
python3.3.5
class squares: def __init__(self, start, stop): self.flag = start - 1 self.value = self.flag self.stop = stop def __iter__(self): self.value = self.flag return self def __next__(self): if self.value == self.stop: raise StopIteration self.value += 1 return self.value a = squares(1,5) b = squares(1,5) s = 0 while s<=41: for i in a: s= s + i print(s) >>> 1 3 6 10 15 16 18 21 25 30 31 33 36 40 45
到45时迭代器停止工作,实现了三圈循环。
可以得出:
迭代器走完一轮,抛出异常后,再次调用会先进行__iter__(),再进行__next__()。