自定义一个迭代器

自定义了一个简单的迭代器,功能是实现一定范围内素数的迭代.很简单没啥好说的,不过犯了一个错误,值得注意.就是迭代器一定要写清楚退出条件!!!

class Prime:
    def __init__(self,n):
        self.prime= n+1

    def __iter__(self):
        return self
    
    def is_prime(self,n):
        i=3
        while True:
            
            if n%i == 0:
                return False
            i+=2
            if i*i>n:
                return True
            
    def __next__(self):
        flag = True
        while flag:
            self.prime-=1
            i = self.prime
            if self.prime<=0:
                raise StopIteration();
            if (i==2 or i%2 !=0) and self.is_prime(i) and i!=1:
                self.prime = i
                flag = False
        return self.prime
    

在内部判断终止条件时,一开始写的是

if self.prime==0:
    raise StopIteration();

我以为引发异常后程序会终止,没想到引发了一次异常后,调用next()还可以继续取值.可能是程序没退出,在继续赋值.以后记住了!

next(a)
Out[34]: -1

next(a)
Out[35]: -3

next(a)
Out[36]: -5

next(a)
Out[37]: -7

改为

 if self.prime<=0:
     raise StopIteration();

posted @ 2018-04-26 22:35  数据菜鸟  阅读(77)  评论(0)    收藏  举报