python自定义迭代器
斐波那契数:
1 class FibonacciNumber : 2 def __init__(self): 3 self.a=0 4 self.b=1 5 def __iter__(self): 6 return self 7 def __next__(self): 8 self.a,self.b=self.b,self.a+self.b 9 return self.a
演示结果:
1 >>> fibNum=FibonacciNumber() 2 >>> for i in fibNum: 3 print(i) 4 5 6 1 7 1 8 2 9 3 10 5 11 8 12 13 13 # ... 一直迭代下去
给定迭代次数:
1 >>> fibNum=FibonacciNumber() 2 >>> for i in fibNum: 3 if i<50: 4 print(i) 5 else: 6 break 7 8 9 1 10 1 11 2 12 3 13 5 14 8 15 13 16 21 17 34
优化后的:
1 class FibonacciNumber : 2 def __init__(self,top=30): 3 self.a=0 4 self.b=1 5 self.top=top 6 def __iter__(self): 7 return self 8 def __next__(self): 9 self.a,self.b=self.b,self.a+self.b 10 if self.a>self.top: 11 raise StopIteration 12 return self.a
演示结果:
1 >>> fibNum=FibonacciNumber() 2 >>> for i in fibNum: 3 print(i) 4 5 6 1 7 1 8 2 9 3 10 5 11 8 12 13 13 21 14 15 >>> fibNum=FibonacciNumber(50) 16 >>> for i in fibNum: 17 print(i) 18 19 20 1 21 1 22 2 23 3 24 5 25 8 26 13 27 21 28 34