问题
实现一个可迭代对象的类,它能迭代出给定范围内所有的素数
解决方案:
- 将该类的iter方法实现成生成器函数,每次yield返回一个素数
def f():
print 'in f().1'
yield 1
print 'in f().2'
yield 2
print 'in f().3'
yield 3
此处直接调用f()并不会得到值
g = f()
生成器函数与迭代器对象同样拥有next()
print f().next()
虽然返回了yield,但是保存了程序运行的状态
生成器对象也是一个可迭代对象iter返回它本身。
也是一个迭代器对象,拥有next()方法
class PrimeNumber:
def __init__(self,start,end):
self.start = start
self.end = end
def isPrimeNumber(self,k):
if k < 2:
return False
for i in xrange(2, k):
if k % i == 0:
return False
return True
def __iter__(self):
for k in xrange(self.start, self.end +1):
if self.isPrimeNumber(k):
yield k
for x in PrimeNumber(1,30):
print x