問題
實現(xiàn)一個可迭代對象的類,它能迭代出給定范圍內(nèi)所有的素數(shù)
解決方案:
- 將該類的iter方法實現(xiàn)成生成器函數(shù),每次yield返回一個素數(shù)
def f():
print 'in f().1'
yield 1
print 'in f().2'
yield 2
print 'in f().3'
yield 3
此處直接調(diào)用f()并不會得到值
g = f()
生成器函數(shù)與迭代器對象同樣擁有next()
print f().next()
雖然返回了yield,但是保存了程序運行的狀態(tài)
生成器對象也是一個可迭代對象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