python,通过__iter__/__next__得到一些类中迭代器的理解

时间:2021-09-23 20:02:24

在__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__()。