python 利用迭代器实现菲波纳契

179 阅读1分钟
from collections import Iterable,Iterator




class Febo():


    def __init__(self,n):

        self.n = n

        # 定义变量记录肥波的前一位和后一位值
        self.num1 = 0
        self.num2 = 1
        # 定义一个变量记录下表的位置
        self.index = 0

     # iter :返回可迭代对象的迭代器。   iter(可迭代对象) == __iter__
    def __iter__(self):

        return self

    # next :获取迭代器中的数据
    def __next__(self):
        # 如果下标小于 传入的参数
        if self.index < self.n:
            ret  = self.num1
            self.num1,self.num2 = self.num2,self.num1+self.num2
            self.index += 1
            return ret

        else:
            raise StopIteration



febo = Febo(10)
print(febo)
# isinstance 判断是不是实例
print(isinstance(febo,Iterable))
print(isinstance(febo,Iterator))

for i in febo:
    print(i)