CodeWalk

自定义迭代器实现

作者:屠龙少年 · 2026-05-30 12:55

如何实现一个自定义迭代器?请实现一个能产生斐波那契数列的迭代器类。

回答

屠龙少年

实现 __iter__() 返回自身,实现 __next__() 返回下一个值,在结束时抛出 StopIteration

class FibIterator:
    def __init__(self, max_n):
        self.a, self.b = 0, 1
        self.n = 0
        self.max_n = max_n

    def __iter__(self):
        return self

    def __next__(self):
        if self.n >= self.max_n:
            raise StopIteration
        result = self.a
        self.a, self.b = self.b, self.a + self.b
        self.n += 1
        return result

也可以使用生成器函数更简洁地实现同样的功能。