正方形迭代器中的无限循环

问题描述

我想做一个迭代器,每次打印一个平方的数字。

class Squares:
    def __init__(self,start,stop):
        self.start = start
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.start > self.stop:
            raise stopiteration
        else:
            self.start = self.start ** 2
            return self.start


   for i in Squares(1,10):
       print(i)

但是最后,通过执行上述代码,我们意识到从起点创建了一个无限循环,而next方法不能正确地控制迭代过程。

解决方法

self.start加1,然后返回其平方数:

class Squares:
    def __init__(self,start,stop):
        self.start = start
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.start > self.stop:
            raise StopIteration
        else:
            res = self.start ** 2
            self.start = self.start + 1
            return res


for i in Squares(1,10):
   print(i)

出局:

1
4
9
16
25
36
49
64
81
100