当前位置: 首页 > news >正文

Python迭代器_迭代器对象可迭代对象必须分开场景

点击查看代码
"""
案例:展示了迭代器对象和可迭代对象必须分开实现的场景:- **核心需求**:多个迭代器需要同时独立遍历同一个数据集
- **问题所在**:单一类实现时,所有迭代器共享同一个状态变量,导致进度冲突
- **解决方案**:`NumberCollection`作为可迭代对象负责数据存储,每次调用`__iter__()`都返回新的`NumberIterator`实例
- **实际应用**:在多线程环境、复杂数据处理、需要保存多个迭代快照等场景下,这种分离设计是必要的通过这种分离设计,每个迭代器都能维护自己的进度状态,实现了真正的独立迭代能力
"""class NumberIterator:"""迭代器类 - 每个实例维护独立的迭代状态"""def __init__(self, numbers):self.numbers = numbersself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.numbers):raise StopIterationvalue = self.numbers[self.index]self.index += 1return valueclass NumberCollection:"""可迭代对象类 - 数据存储,不维护迭代状态"""def __init__(self, numbers=None):self.numbers = numbers if numbers is not None else []def __iter__(self):# 每次调用都返回新的迭代器实例return NumberIterator(self.numbers)def add_number(self, number):self.numbers.append(number)# 使用场景演示
if __name__ == "__main__":collection = NumberCollection([1, 2, 3, 4, 5])print("=== 多个独立迭代器同时工作 ===")# 创建两个独立的迭代器iterator1 = iter(collection)iterator2 = iter(collection)# 两个迭代器独立工作,互不干扰print(f"迭代器1: {next(iterator1)}")  # 1print(f"迭代器2: {next(iterator2)}")  # 1print(f"迭代器1: {next(iterator1)}")  # 2print(f"迭代器2: {next(iterator2)}")  # 2# 添加新元素后,现有迭代器不受影响collection.add_number(6)print(f"迭代器1: {next(iterator1)}")  # 3print(f"迭代器2: {next(iterator2)}")  # 3print("\n=== 与单一类实现的对比 ===")# 如果使用同一个类实现,会出现状态冲突class BadDesign:def __init__(self, numbers):self.numbers = numbersself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.numbers):raise StopIterationvalue = self.numbers[self.index]self.index += 1return valuebad = BadDesign([1, 2, 3, 4, 5])bad_iter1 = iter(bad)bad_iter2 = iter(bad)  # 实际上返回的是同一个对象print(f"坏设计的迭代器1: {next(bad_iter1)}")  # 1print(f"坏设计的迭代器2: {next(bad_iter2)}")  # 2 - 状态被共享了!
http://www.jsqmd.com/news/39577/

相关文章:

  • 251113
  • H模型流程
  • 集合框架、io流、多线程
  • Ubuntu 22.04 x86_64 cron不执行原因 - whitesky
  • 为啥要搞utf-8等,直接存储Unicode码点不行吗?
  • 2025 年 11 月闸阀厂家推荐排行榜,美标闸阀,国标闸阀,锻钢闸阀,高压闸阀,碳钢闸阀,高温闸阀,焊接闸阀,法兰闸阀公司推荐
  • 2025年国内商标注册机构综合实力排行榜:专业服务商深度解析
  • 湛江西林瓶灌装旋盖机,选配IQ/OQ/PQ验证款
  • 2025年安徽商标注册公司Top5排行榜:专业机构深度解析
  • 锦州出口欧美西林瓶灌装压塞机 FDA认证
  • 手写汉字
  • 凉山中药混悬剂西林瓶灌装机选型,防沉淀封口成本可控
  • 沈阳压死边折弯机模具价格影响因素及采购攻略
  • 贝叶斯优化之采集函数 0基础学习
  • 神经网络滤波器用途
  • 字符编码体系详解:从ASCII到UTF-8的演进与实践
  • 自定义实现Kubernetes CSI
  • 按位翻转
  • 2025年10月鸡精生产工厂口碑排行榜TOP10:江苏天味食品科技领跑行业
  • 2025年10月复合调味料研发代加工厂家综合实力排行榜
  • Python中,`ord()` 和 `decode()` 有点儿像,区别是什么?
  • JavaEE--SpringIoC - 详解
  • 2025年比较好的非标设备机架产品推荐排行榜单,非标设备机架公司精选实力品牌榜单发布
  • flask: 实现流式输出数据
  • 第四十篇
  • Codeforces-2148
  • 丽江西林瓶灌装线选充氮还是真空型?
  • 2025年北京继承官司律师机构实力排行榜新鲜发布,继承律师事务所/北京继承律师哪个好/北京丰台继承律师/北京继承纠纷法律事务所选哪家
  • 辽源适配冻干机西林瓶灌装加塞机推荐
  • webclientserver