如何使用生成器函数实现可迭代对象
问题举例:
实现一个可迭代对象的类,它能迭代出给定范围内 的所有素数:
pn = PrimeNumbers(1, 30)
for x in pn:
print(x)
输出结果:
2 3 5 7 11 13 17 19 23 29
解决思路
将该类的__iter__方法实现成生成器函数,每次用yield返回一个素数
代码
from collections.abc import Iterable class PrimeNumbers(Iterable): def __init__(self, a, b): self.a = a self.b = b def __iter__(self): for k in range(self.a, self.b + 1): if self.is_prime(k): yield k def is_prime(self, k): return False if k < 2 else all(map(lambda x: k % x, range(2, k))) pn = PrimeNumbers(1, 30) for n in pn: print(n)
参考资料:python3实用编程技巧进阶