自定义一个迭代器
自定义了一个简单的迭代器,功能是实现一定范围内素数的迭代.很简单没啥好说的,不过犯了一个错误,值得注意.就是迭代器一定要写清楚退出条件!!!
class Prime:
def __init__(self,n):
self.prime= n+1
def __iter__(self):
return self
def is_prime(self,n):
i=3
while True:
if n%i == 0:
return False
i+=2
if i*i>n:
return True
def __next__(self):
flag = True
while flag:
self.prime-=1
i = self.prime
if self.prime<=0:
raise StopIteration();
if (i==2 or i%2 !=0) and self.is_prime(i) and i!=1:
self.prime = i
flag = False
return self.prime
在内部判断终止条件时,一开始写的是
if self.prime==0:
raise StopIteration();
我以为引发异常后程序会终止,没想到引发了一次异常后,调用next()还可以继续取值.可能是程序没退出,在继续赋值.以后记住了!
next(a)
Out[34]: -1
next(a)
Out[35]: -3
next(a)
Out[36]: -5
next(a)
Out[37]: -7
改为
if self.prime<=0:
raise StopIteration();

静以修身,俭以养德!

浙公网安备 33010602011771号