问题10:如何使用生产器函数实现可迭代对象
注:了解生产器函数,查询:Python:生成器函数
案例:
- 需求:实现一个可迭代的类,它能迭代出给定范围内所有素数;
- 思路:1)构造一个类(如:PrimeNumbers()),给定两个参数,如:1、100,来限定搜索的范围;2)对实例(如:pn)进行迭代,得到目标数据;
-
方案:使用生成器函数,来实现可迭代对象;
- 将该类的__iter__方法实现成生成器函数,每次yield返回一个素数;
#在问题8~9中,实现可迭代对象的方法:通过实现一个包含next方法的迭代器对象的类,来实现可迭代对象;
- pn = PrimeNumbers(1, 100)
- for k in pn:
- print(k)
代码:
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
for x in PrimeNumbers(1, 100):
print(x)
