实现一个迭代器类

# 写一个实现迭代器协议的类 Primes 让此类可以生成从b开始的n个素数
# class Primes:
#     def __init__(self, b, n):
#        ....
#     ....
# for x in Primes(10, 4):
#     print(x)  # 11 13 17 19
# 

class Primes(object):
    @staticmethod
    def __isprime(x):
        for i in range(2, x):
            if x % i == 0:
                return False
        return True

    def __init__(self, b, n):
        self.begin = b
        self.count = n
    def __iter__(self):
        self.cur_pos = self.begin  # 设置迭代的起始值
        self.cur_count = 0  # 用于记录已生成几个
        return self

    def __next__(self):
        # 已完成生成,不需要再生成,我停止迭代
        if self.cur_count >= self.count:
            raise StopIteration
        self.cur_count += 1  # 计数加1
        while True:
            if self.__isprime(self.cur_pos):
                v = self.cur_pos
                self.cur_pos += 1
                return v
            self.cur_pos += 1  # 为下一次循环做准备



for x in Primes(10, 4):
    print(x)  # 11 13 17 19

 

posted @ 2018-09-12 21:11  阿牛的牙  阅读(685)  评论(0编辑  收藏  举报