3-2 如何使用生成器函数实现可迭代对象

实际案列:
实现一个可迭代对象的类,它能迭代出给定范围内所有素数:
pn = PrimeNumbers(1,30)
for k in pn:
print(k)
输出结果:2 3 5 7 11 13 17 19 23 29

解决方案:
将该类的__iter__方法实现成生成器函数,每次yield返回一个素数

class PrimeNumbers:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def _isPrimeNum(self,k):
        if k < 2:
            return False

        for i in range(2,k):
            if k % i == 0:
                return False
        return True

    def __iter__(self):
        for k in range(self.start, self.end+1):
            if self._isPrimeNum(k):
                yield k


pn = PrimeNumbers(1,30)

for x in pn:
    print(x) #2 3 5 7 11 13 17 19 23 29

你可能感兴趣的:(3-2 如何使用生成器函数实现可迭代对象)