首先我们来复习一下有关迭代器的基础知识!
迭代器 迭代:使用for ...in循环语句 代码:使用遍历工具访问容器中的数据 开发:产品的更新就称为迭代 可迭代对象 可以进行for循环取值的对象叫可迭代对象 表象:可以进行for循环的 本质:底层实现__iter__()魔法方法的 迭代器功能: 1、返回可迭代对象的成员 2、记录迭代位置 3、当迭代完成时再次迭代抛出异常
那么for循环的本质是什么呢?
for循环本质是 底层实现——iter——()和——next——()魔法方法的 ——iter——():获取可迭代对象的迭代器 返回一个迭代器 return 迭代器 ——next——():获取可迭代对象的下一条数据 返回迭代对象,想输出什么就返回什么 记录迭代位置(记录每次的取值) 迭代完成抛出异常 迭代器与可迭代对象的关系: 迭代器是可迭代对象,但是可迭代对象不一定是迭代器
有了以上复习,我们来看一下斐波那契数列。
斐波那契数列 a,b = b , a + b 0 1 1 2 3 5 8 13 21 34... 规律:前2个数相加等于下一个数
我们来分析一下数组
a b a + b 1 1 1+1=2 1 2 1+2=3 2 3 2+3=5 3 5 3+5=8
最后让我们定义一个类来实现我们的主题斐波那契数列吧!
class Fibitor():
def __init__(self,n):
#指明生成数列的前n个数
self.n = n
#定义前前一个数
self.a = 0
#定义前一个数
self.b = 1
#定义一个变量来记录迭代位置,定义变量初始值
self.count1 = 0
def __iter__(self):
# 返回一个迭代器
return self
def __next__(self):
# 如果记录位置长度小于列表长度:
if self.count1 < self.n:
# a,b = b,a+b 斐波那契数列规律
self.a,self.b = self.b,self.a + self.b
self.count1 += 1 #记录迭代位置
return self.a #返回内容
else:
raise StopIteration #抛出异常
#创建对象 对象名 = 类名()
fib = Fibitor(15)
# for取值:
for i in fib:
print(i)
#list强转
# print(list(fib))
#tuple强转
# print(tuple(fib))
从上题中我们得知,迭代器有三种取值方式:
for循环、list强转、tuple强转,三者择其一即可。
我们来拓展一下,对比迭代器三种取值方式:
迭代器三种取值方式的对比: 1、迭代器中数据较少时,没有区别 2、迭代器中数据较多时,for循环取值是最好的方式,可以减少对内存的压力
版权声明:本文为weixin_61422097原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。