回顾什么是迭代器协议:
迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个
StopIteration异常,以终止迭代(只能往后走,不能往前退)
类中的可迭代对象必须提供__iter__()和__next__()方法
1 class Foo:
2 def __init__(self,n):
3 self.n = n
4
5 def __iter__(self):
6 return self
7
8 def __next__(self):
9 if self.n ==5:
10 raise StopIteration('结束了')
11 self.n += 1
12 return self.n
13
14 f = Foo(1)
15 for i in f:
16 print(i)
17
18 # 采用for循环碰到stopiteration自动停止,而不会影响真个程序
19
20 print(f.__next__()) #使用next(f)或者f.__next__()会抛出异常,程序终止
例子:使用迭代器协议生成斐波那契数列
1 class Fib:
2 def __init__(self):
3 self._a = 1
4 self._b = 1
5 def __iter__(self):
6 return self
7 def __next__(self):
8 if self._a > 100:
9 raise StopIteration('终止了')
10 self._a,self._b = self._b,self._a+self._b
11 return self._a
12
13 f = Fib()
14 for i in f:
15 print(i)