You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现支持嵌套迭代的自定义Python迭代器?

解决方法

核心问题在于你原来的类把可迭代对象和迭代器混在了一起:__iter__返回了self,每次迭代都共享同一个实例的状态。而列表这类内置可迭代对象,每次调用iter()都会返回一个全新的迭代器,各自维护自己的进度。

最简单的修改方式有两种:

方法1:用内部类封装独立迭代器

把迭代器的状态封装到内部类里,每次调用__iter__都创建这个内部类的新实例,确保每次迭代都有独立的进度:

class MyNumbers:
    def __iter__(self):
        class Iterator:
            def __init__(self):
                self.a = 1
            def __next__(self):
                if self.a <= 3:
                    x = self.a
                    self.a += 1
                    return x
                else:
                    raise StopIteration
        return Iterator()

方法2:用生成器实现__iter__

生成器是Python里实现迭代器的简便方式,每次调用__iter__都会生成一个全新的生成器实例,天然支持独立迭代:

class MyNumbers:
    def __iter__(self):
        a = 1
        while a <= 3:
            yield a
            a += 1

测试这两种修改后的类,再运行之前的嵌套迭代代码,就能得到和列表一致的正常输出。原理很简单:每次外层或内层调用iter(myclass)(包括for...in循环的隐式调用),都会得到一个全新的迭代器,各自维护自己的进度变量,互不干扰。


内容的提问来源于stack exchange,提问作者hoelzeli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:25:33