当前位置: 首页 > 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.zskr.cn/news/48736.html

相关文章:

  • 集合框架、io流、多线程
  • Ubuntu 22.04 x86_64 cron不执行原因 - whitesky
  • 为啥要搞utf-8等,直接存储Unicode码点不行吗?
  • 2025 年 11 月闸阀厂家推荐排行榜,美标闸阀,国标闸阀,锻钢闸阀,高压闸阀,碳钢闸阀,高温闸阀,焊接闸阀,法兰闸阀公司推荐
  • 手写汉字
  • 沈阳压死边折弯机模具价格影响因素及采购攻略
  • 贝叶斯优化之采集函数 0基础学习
  • 2025年10月鸡精生产工厂口碑排行榜TOP10:江苏天味食品科技领跑行业
  • 自定义实现Kubernetes CSI
  • 2025年10月复合调味料研发代加工厂家综合实力排行榜
  • Python中,`ord()` 和 `decode()` 有点儿像,区别是什么?
  • flask: 实现流式输出数据
  • 第四十篇
  • webclientserver
  • 2025年最新钣金加工厂家综合实力排名,助您轻松选择,钣金加工加工厂睿意达发展迅速,实力雄厚
  • 在macOS上高效使用8BitDo机械键盘:超级按键与Karabiner配置指南
  • 2025年度PLC控制柜厂家红榜,这些企业获好评如潮,正压通风防爆控制柜/水处理PLC的电气控制柜/供水设备变频控制柜产品找哪家
  • 【比赛记录】2025CSP+NOIP 冲刺模拟赛合集V
  • 71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集) - 实践
  • 2025年最新优质的管材源头厂家口碑推荐,市场家用管材生产厂家中亿百年满足多元需求
  • 2025年加气线厂家推荐榜单TOP5:实力派引领行业高质量发展
  • 乌鲁木齐高校实验室西林瓶灌装机选型指南
  • nvme-cli 插件架构
  • 详细介绍:Linux C/C++ 学习日记(22):Reactor模式(二):实现简易的webserver(响应http请求)
  • 2025年市场比较好的PE重包装袋批发厂家口碑推荐榜,目前PE重包装袋公司排行榜单骏岚纸塑引领行业标杆
  • 2025年市场上热门的公交站台广告品牌推荐,高铁广告/社区门禁广告/主流网络媒体/机场广告/电梯视频广告/户外LED广告品牌排行榜单
  • CSP-S2025 题目题解
  • 2025权威测评床垫十大品牌推荐:科学数据引领睡眠新革命
  • 2025年红砖选购避坑指南:这些口碑品牌值得信赖,新洲排行前列的红砖批发厂家推荐排行榜技术引领与行业解决方案解析
  • 2025年行业内做得好的PE重包装袋直销厂家推荐排行榜,PE重包装袋厂家聚焦优质品牌综合实力排行