用迭代器实现斐波那契数列

首先我们来复习一下有关迭代器的基础知识!

迭代器
迭代:使用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版权协议,转载请附上原文出处链接和本声明。