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

 

posted @ 2017-11-13 09:46  xiongjiawei  阅读(144)  评论(0)    收藏  举报