Python 自定义迭代器 --以斐波那契数列为例
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)=1def __iter__(self):"""返回迭代器对象自身,使该类符合可迭代协议。"""return selfdef __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。
- 斐波那契生成逻辑:使用两个变量
a和b动态更新数列,避免递归或列表存储,节省内存。 - 终止条件:当前值
a > max_num时停止,因此输出的是小于等于max_num的斐波那契数。 - 输出示例:当
max_num=10时,输出为0 1 1 2 3 5 8(下一个数是 13,已超过 10,故不输出)。
这种方式体现了 Python 的迭代器协议,适用于需要惰性求值(lazy evaluation)或节省内存的场景。
