1.迭代器的应用场景
1). 如果数列的数据规模巨大
2). 数列有规律,但是依靠列表推导式描述不出来
2.数学中有个著名的斐波拉契数列(Fibonacci),数列中第⼀个数0,第⼆个数1,其后的每⼀个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们想要通过for...in...循环来遍历迭代斐波那契数列中的前n个数。那么这个斐波那契数列我们就可以⽤迭代器来实现,每次迭代都通过数学计算来⽣成下⼀个数。
classFibIterator(object):
"""fib数列迭代器"""
def __init__(self, n):
""""""
self.num1 = 0
self.num2 = 1
self.n = n # 用来保存迭代的总次数
self.i = 0 # 用来记录迭代次数
def __next__(self):
# 判断是否迭代结束,如果没有到达迭代次数,则返回数据
if self.i < self.n:
# 保存要返回的值
item = self.num1
# 计算num1, num2的值,方便下次迭代返回
self.num1, self.num2 = self.num2,self.num1 + self.num2
# 记录迭代次数
self.i += 1
return item
else:
# 到达了迭代次数,抛出异常
raise StopIteration
def __iter__(self):
return self
fib =FibIterator(20)
li = list(fib)
print(li)