尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Python迭代器_迭代器对象可迭代对象必须分开场景
📅 发布时间:2026/7/22 10:05:56
点击查看代码
"""
案例:展示了迭代器对象和可迭代对象必须分开实现的场景:- **核心需求**:多个迭代器需要同时独立遍历同一个数据集
- **问题所在**:单一类实现时,所有迭代器共享同一个状态变量,导致进度冲突
- **解决方案**:`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 - 状态被共享了!

相关新闻

  • 字符编码体系详解:从ASCII到UTF-8的演进与实践
  • 按位翻转
  • JavaEE--SpringIoC - 详解

最新新闻

  • AI模型适用场景匹配度评估:3步精准定位你的业务该用LLM、Diffusion还是传统ML
  • 【论文解读】复数CVNet:跳过 FFT,Jetson 上 2.75 ms 如何完成雷达手势识别?
  • 线上核验系统焕新教程|2026宝玑全国维修点线上查询渠道升级完整攻略 - 亨得利腕表服务中心
  • PHP生产环境Docker镜像优化实践
  • 江阴黄金回收哪里靠谱?本地老牌连锁对比,上门回收更省心 - 行行星
  • 2025毕业生必看:5大AI降重技术实测对比

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号