【1.130】__next__ __iter__ 实现迭代协议
1、基本的迭代器:
class Foo: def __init__(self,x): self.x = x def __iter__(self): return self def __next__(self): self.x = self.x+1 return self.x f1 = Foo(2) for i in range(1000): if i <= 5: print(i) else: break # 0 1 2 3 4 5 这里不判断就运行到 1000 for i in f1: if i <= 5: print(i) else: break # 3 4 5 这里不判断就一一直运行 直到内存溢出 需药抛出错误 或 判断运行范围
2、看看 没有步长 默认为1 的range
class Foo: def __init__(self,start,stop): self.num = start self.stop = stop def __iter__(self): return self def __next__(self): if self.num >= self.stop: raise StopIteration n = self.num self.num += 1 return n for i in Foo(5,10): print(i) #5 6 7 8 9 这里就range 一样有范围了 超出范围就报错 stopiteration for i in range(5,10): print(i) # 5 6 7 8 9 这里是range实现迭代的 程序内 也是实现了报错机制
3、看看有步长的 range
class Foo: def __init__(self,start,stop,step): self.start = start self.stop = stop self.step = step def __iter__(self): return self def __next__(self): if self.start >= self.stop: raise StopIteration n = self.start self.start += self.step return n for i in Foo(5,20,3): print(i) #5 8 11 14 17 for i in range(5,20,3): print(i) #5 8 11 14 17
4、看看斐波拉切 数列
class Fib: def __init__(self): self.num1 = 0 self.num2 = 1 def __iter__(self): return self def __next__(self): self.num1,self.num2 = self.num2,self.num1+self.num2 return self.num1 for i in Fib(): if i < 100: print (i,end=" ") else: break #1 1 2 3 5 8 13 21 34 55 89
浙公网安备 33010602011771号