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

如何让Python迭代器相互独立、不产生交互?

问题解决:实现独立状态的字符串迭代器

问题根源

你的代码中__iter__方法直接返回实例自身,导致所有通过iter()获取的迭代器共享同一个_ix状态变量。当调用next(iter1)后,_ix被修改为1,后续next(iter2)会基于这个已修改的索引取值,最终引发多个迭代器互相干扰的问题。

解决方案

方案一:拆分容器与迭代器类

将原类拆分为容器类和独立的迭代器类,每次调用iter()时返回全新的迭代器实例,确保每个迭代器拥有独立的状态:

class MyStringIterator:
    def __init__(self, s):
        self.s = s
        self._ix = 0

    def __next__(self):
        try:
            item = self.s[self._ix]
        except IndexError:
            raise StopIteration
        self._ix += 1
        return item

class MyString:
    def __init__(self, s):
        self.s = s

    def __iter__(self):
        # 每次调用iter()都生成新的迭代器实例
        return MyStringIterator(self.s)

string = MyString('abcd')

iter1 = iter(string)
iter2 = iter(string)
print(next(iter1))  # 输出 'a'
print(next(iter2))  # 输出 'a'

方案二:利用生成器简化实现

Python生成器天然具备独立迭代状态,且遍历结束后会自动抛出StopIteration,代码更简洁:

class MyString:
    def __init__(self, s):
        self.s = s

    def __iter__(self):
        for char in self.s:
            yield char

string = MyString('abcd')

iter1 = iter(string)
iter2 = iter(string)
print(next(iter1))  # 输出 'a'
print(next(iter2))  # 输出 'a'

两种方案均满足你的两项要求:__next__方法(生成器自动实现)会在遍历结束时抛出StopIteration,同时多个迭代器的状态完全独立,不会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:20:43