1 实现迭代器(写在一个类)
2 class MyList(object):
3
4
5 def __init__(self):
6 self.container = []
7 self.current = 0
8
9
10 def add(self, item):
11 self.container.append(item)
12
13
14 def __iter__(self):
15
16
17 return self
18
19
20 def __next__(self):
21 if self.current < len(self.container):
22 item = self.container[self.current]
23 self.current += 1
24 return item
25 else:
26 raise StopIteration
27
28
29
30
31 my_list = MyList()
32 my_list.add(1)
33 my_list.add(2)
34 my_list.add(3)
35 my_list.add(4)
36 my_list.add(5)
37
38
39 for num in my_list:
40 print(num)
for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。
1 class FibIterator(object):
2 """
3 斐波那契数列
4 """
5
6 def __init__(self, n):
7 """
8 :param n:int, 指明生成数列的前n个数
9 """
10 self.n = n
11 # current用来保存当前生成到数列中的第几个数了
12 self.current = 0
13 # num1用来保存前前一个数,初始值为数列中的第一个数0
14 self.num1 = 0
15 # num2用来保存前一个数,初始值为数列中的第二个数1
16 self.num2 = 1
17
18 def __next__(self):
19 """
20 被next()函数调用来获取下一个数
21 :return:
22 """
23
24 if self.current < self.n:
25 num = self.num1
26 self.num1, self.num2 = self.num2, self.num1+self.num2
27 self.current += 1
28 return num
29 else:
30 raise StopIteration
31
32 def __iter__(self):
33 """
34 "迭代器的__iter__返回自身即可
35 :return:
36 """
37 return self
38
39
40 if __name__ == '__main__':
41 fib = FibIterator(10)
42 for num in fib:
43 print(num, end=" ")