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

被折叠的 条评论
为什么被折叠?



