迭代器应用场景1---斐波那契

1,for循环

 1 nums = list()
 2 
 3 a = 0
 4 b = 1
 5 i = 0
 6 
 7 while i<10:
 8     nums.append(a)
 9     a,b = b,a+b
10     i += 1
11 
12 for num in nums:
13     print(num)

除了for循环能接受可迭代对象,list、tuple等也能接收

1 a = (11,22,33)
2 # list() 不是简单的类型转换 是迭代的方式在a里面取值,重新生成列表 然后append()到列表中
3 #用tuple()转换的时候也一样用到迭代器
4 b = list(a)
5 print(b)

2.class

 1 class Feibonacci():
 2     def __init__(self,all_num):
 3         self.all_num = all_num
 4         self.a = 0
 5         self.b = 1
 6         self.current_num = 0
 7 
 8     def __iter__(self):
 9         return self
10 
11 
12     def __next__(self):
13         if self.current_num < self.all_num:
14             ret = self.a    # ? 能理解,但想不到用这种方法
15             self.a,self.b = self.b,self.a+self.b
16             self.current_num += 1
17             return ret
18         else:
19             raise StopIteration
20 
21 febo = Feibonacci(10)
22 
23 for num in febo:
24     print(num)

3.我能理解的class迭代器方式

 1 class Feibonacci():
 2     def __init__(self,all_num):
 3         self.all_num = all_num
 4         self.a = 0
 5         self.b = 1
 6         self.nums = list()
 7         self.current_num = 0
 8 
 9     def __iter__(self):
10         return self
11 
12 
13     def __next__(self):
14         if self.current_num < self.all_num:
15             self.nums.append(self.a)
16             self.a,self.b = self.b,self.a+self.b
17             ret = self.nums[self.current_num]
18             self.current_num += 1
19             return ret
20         else:
21             raise StopIteration
22 
23 febo = Feibonacci(10)
24 
25 for num in febo:
26     print(num)
原文地址:https://www.cnblogs.com/yifengs/p/11392711.html