python核心编程-迭代器完成斐波那契数列求值

python核心编程-迭代器完成斐波那契数列求值

斐波那契数列相信大家都会求,这里使用一个python的迭代器完成斐波那契数列的求值。

1. 自定义迭代器

如果想要一个对象成为一个可迭代对象,这个对象可以使用for循环遍历那么这个对象中必须要实现两个方法:

  • 方法一:需要实现init,__iter__方法是迭代对象的核心方法,每次迭代的核心控制者是一个迭代器;
  • 方法二:需要实现另一个方法: next,__next__方法的核心作用就是返回每次迭代的最终数据,迭代器每次进行迭代工作的最终结果
    在next方法中StopIteration异常对象主要就是迭代完成的标志

2. 可迭代的本质:

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

3. 使用迭代器完成斐波那契数列的求值(leetcode斐波那契

class Solution:
    def fib(self, n: int) -> int:
        if n == 0:
            return 0
        elif n == 1:
            return 1
        fibonacci = Fibonacci(n-1)
        for i in fibonacci:
            pass
        return fibonacci.num2
                

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

    def __iter__(self):  # 只要一个类里面实现了__iter__方法就是一个迭代器
        return self

    def __next__(self):  # 迭代器要能够被for循环迭代的话,需要实现__next__方法
        if self.i < self.num:
            self.num1, self.num2 = self.num2, self.num1 + self.num2
            self.i += 1
            return self.num1
        else:
            raise StopIteration  # for循环结束的条件实际上是抛出了一个StopIteration异常

相关问题:

  1. python的迭代器与生成器
  2. 生成器与协程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值