朝花夕拾--Python中用迭代器完成斐波那契数列

完数(水仙花数)我们可能不会陌生,在之前的博客中我们曾采用递归的思想,来完成过任意位数的斐波那契数列,今天我们再来回顾一下,并且采用迭代器的方法来再一次的完成
首先我们先来了解一下迭代器

迭代器

迭代器就是重复地做一些事情,可以简单的理解为循环,迭代器是python中最强大的功能之一,迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象
基本上我们知道的可遍历对象:list、tuple、str等类型数据都可以使用for …in…的循环进行遍历(从里面依次往出获取数据)数据,这种过程除了叫做遍历之外,还叫做迭代
我们可以通过调用方法来来判断是否是可迭代的对象(我们以list为例)

#先导入迭代对象模块
from collections import Iterable
#函数判断list是否是Iterable
isinstance(list,Iterable)

另外,在python中我们还可以实现自定义的可迭代器

自定义迭代器

如果想要一个对象成为一个可迭代对象,这个对象可以使用for循环遍历那么这个对象中必须要实现一个方法: init,__iter__方法是迭代对象的核心方法,每次迭代的核心控制者是一个迭代器;如果想要实现一个迭代器,则必须还得实现另一个方法: next,__next__方法的核心作用就是返回每次迭代的最终数据,迭代器每次进行迭代工作的最终结果
在next方法中StopIteration异常对象主要就是迭代完成的标志

可迭代的本质:

分析对可迭代对象进行迭代的使用过程,发现没迭代一次(即在for…in…中每循环一次)都会返回对象中的下一条数据,一直向后读取直到迭代完最后一个数据的结果。那么在这个过程中,就应该有一个特殊的成员去记录每次访问到了第几条数据。这个成员每次迭代都可以记录好这个数据以便下次迭代,我们把这个能帮助我们进行数据迭代的成员称为“迭代器”,可迭代对象的本质就是可以向我们提供一个这样特殊成员

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

class Fibonacci(object):
    def __init__(self, num):
        self.num = num
        self.i = 0
        self.num1 = 0
        self.num2 = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < self.num:
            self.num1, self.num2 = self.num2, self.num1 + self.num2
            self.i += 1
            return self.num1
        else:
            raise StopIteration


if __name__ == '__main__':
    num = int(input("请输入想要计算的位数:"))
    fibonacci = Fibonacci(num)
    for item in fibonacci:
        print(item, end=" ")

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Layfolk_XK/article/details/107879019