class FibIterator:
    """
    一个用于生成斐波那契数列的自定义迭代器类。
    生成不超过指定最大值 max_num 的所有斐波那契数。
    """

    def __init__(self, max_num):
        """初始化迭代器,设置上限值和斐波那契初始状态。"""
        self.max_num = max_num  # 用户指定的斐波那契数最大值(超过则停止)
        self.a, self.b = 0, 1   # 斐波那契数列的前两个值:F(0)=0, F(1)=1

    def __iter__(self):
        """返回迭代器对象自身,使该类符合可迭代协议。"""
        return self

    def __next__(self):
        """
        返回斐波那契数列中的下一个数。
        如果当前值超过 max_num,则抛出 StopIteration 终止迭代。
        """
        if self.a > self.max_num:
            raise StopIteration  # 满足终止条件,结束 for 循环

        current = self.a              # 保存当前要返回的值
        self.a, self.b = self.b, self.a + self.b  # 更新为下一对斐波那契数
        return current                # 返回当前斐波那契数

if __name__ == '__main__':
    # 使用示例:创建一个最大值为 10 的斐波那契迭代器
    fib_it = FibIterator(10)

    # 通过 for 循环自动调用 __iter__ 和 __next__
    for num in fib_it:
        print(num, end=" ")  # 输出:0 1 1 2 3 5 8

总结说明:

  • 功能FibIterator 是一个自定义迭代器,用于按需生成斐波那契数列中不超过 max_num 的所有数字。
  • 核心方法
    • __iter__:返回自身,表明该对象是迭代器。
    • __next__:定义每次迭代返回的值,并在满足条件时抛出 StopIteration
  • 斐波那契生成逻辑:使用两个变量 ab 动态更新数列,避免递归或列表存储,节省内存。
  • 终止条件:当前值 a > max_num 时停止,因此输出的是小于等于 max_num 的斐波那契数。
  • 输出示例:当 max_num=10 时,输出为 0 1 1 2 3 5 8(下一个数是 13,已超过 10,故不输出)。

这种方式体现了 Python 的迭代器协议,适用于需要惰性求值(lazy evaluation)或节省内存的场景。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐