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

python:Iterator Pattern

 

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:41 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Jewel.pyclass Jewel(object):"""珠宝实体类,封装珠宝的所有属性"""def __init__(self, name, price, material, color, craft):self.name = name      # 珠宝名称self.price = price    # 价格(元)self.material = material  # 材质(黄金/钻石/珍珠等)self.color = color    # 颜色(金色/白色/粉色等)self.craft = craft    # 制作工艺(拉丝/镶嵌/抛光等)def __str__(self):"""自定义打印格式,方便展示完整属性:return:"""return (f"【{self.name}】\n"f"  价格:{self.price}元\n"f"  材质:{self.material}\n"f"  颜色:{self.color}\n"f"  工艺:{self.craft}")
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:32 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Iterator.pyfrom abc import ABC, abstractmethod# --------------------------
# 1. 抽象迭代器(Iterator)
# --------------------------
class Iterator(ABC):"""迭代器抽象类,定义迭代器的核心方法"""@abstractmethoddef __next__(self):"""返回下一个元素,没有元素时抛出 StopIteration 异常:return:"""pass@abstractmethoddef has_next(self):"""判断是否还有下一个元素(可选,Python 原生迭代器靠 StopIteration 标识结束):return:"""pass@abstractmethoddef __iter__(self):""":return:"""pass

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:33 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelryIterator.pyfrom IteratorPattern.Iterator import Iterator# --------------------------
# 2. 具体迭代器(Concrete Iterator)
# --------------------------
class JewelryIterator(Iterator):"""珠宝迭代器,负责遍历珠宝盒中的珠宝"""def __init__(self, jewelry_list):"""保存要迭代的珠宝列表:param jewelry_list:"""self._jewelry_list = jewelry_list# 初始化迭代指针(索引)self._index = 0def __next__(self):"""Python 原生迭代器核心方法,返回下一个珠宝:return:"""if self.has_next():current_jewelry = self._jewelry_list[self._index]self._index += 1return current_jewelry# 没有元素时抛出 StopIteration,终止迭代raise StopIteration("已遍历完所有珠宝")def has_next(self):"""判断是否还有未遍历的珠宝:return:"""return self._index < len(self._jewels) if hasattr(self, '_jewels') else self._index < len(self._jewelry_list)def __iter__(self):""":return:"""return self

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:35 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Aggregate.pyfrom abc import ABC, abstractmethod# --------------------------
# 3. 抽象聚合类(Aggregate)
# --------------------------
class Aggregate(ABC):"""聚合对象抽象类,定义创建迭代器的方法"""@abstractmethoddef create_iterator(self):"""创建并返回一个迭代器对象:return:"""pass

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:36 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelryBox.py
from IteratorPattern.Aggregate import Aggregate
from IteratorPattern.JewelryIterator import JewelryIterator
from IteratorPattern.Jewel import Jewel# --------------------------
# 4. 具体聚合类(Concrete Aggregate)
# --------------------------
class JewelryBox(Aggregate):"""珠宝盒,存放珠宝的聚合对象"""def __init__(self):"""内部存储珠宝的列表(内部表示,对外隐藏)"""self._jewels = []def add_jewel(self, jewel):"""添加珠宝到珠宝盒:param jewel::return:"""if isinstance(jewel, Jewel):self._jewels.append(jewel)else:raise TypeError("只能添加Jewel类型的对象到珠宝盒")def create_iterator(self):"""创建并返回珠宝迭代器:return:"""return JewelryIterator(self._jewels)def __iter__(self):""":return:"""return self.create_iterator()

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:迭代器模式(Iterator Pattern)
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/2/28 21:47 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : IteratorBll.py
from IteratorPattern.Jewel import Jewel
from IteratorPattern.JewelryBox import JewelryBox# --------------------------
# 5. 客户端代码(使用示例)
# --------------------------
class IteratorBll(object):""""""def demo(self):""":return:"""# 1. 创建珠宝盒my_jewelry_box = JewelryBox()my_jewelry_box.add_jewel(Jewel("钻石项链", 15800, "铂金+南非钻石", "白色", "爪镶工艺"))my_jewelry_box.add_jewel(Jewel("黄金戒指", 3200, "足金999", "金黄色", "拉丝工艺"))my_jewelry_box.add_jewel(Jewel("珍珠耳环", 2800, "淡水珍珠+925银", "奶白色", "抛光工艺"))my_jewelry_box.add_jewel(Jewel("翡翠手镯", 8900, "天然翡翠+银镶边", "翠绿色", "雕刻工艺"))# 3. 创建迭代器并遍历,展示完整属性print("遍历珠宝盒中的所有珠宝(含完整属性):\n")iterator = my_jewelry_box.create_iterator()while iterator.has_next():jewel = next(iterator)print(jewel)  # 自动调用Jewel的__str__方法,展示完整属性print("-" * 30)  # 分隔线,优化显示效果# 重新创建迭代器(因为上面的迭代器已经遍历完了)print("=== 方式1:Python 原生 for 循环 ===")iterator1 = my_jewelry_box.create_iterator()for jewel in iterator1:print(jewel)print("-" * 30)# 方式2:使用 itertools 或生成器(适合批量处理/链式操作)print("\n=== 方式2:生成器表达式遍历 ===")iterator2 = my_jewelry_box.create_iterator()# 把迭代器转为生成器,可灵活处理(比如筛选、映射)jewel_generator = (j for j in iterator2)for jewel in jewel_generator:print(jewel)print("-" * 30)# 方式3:try-except 捕获 StopIteration(手动模拟for循环底层逻辑)print("\n=== 方式3:try-except 手动遍历 ===")iterator3 = my_jewelry_box.create_iterator()while True:try:jewel = next(iterator3)  # 手动调用__next__print(jewel)print("-" * 30)except StopIteration:# 捕获迭代结束的异常,终止循环print("遍历完成!")break

 

调用:

# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/18 20:58
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : main.py
# explain   : 学习
from bll.MementoBll import MementoBll
from bll.CommandBll import CommandBll
from bll.StateBll import StateBll
from bll.TemplateMethodBll import TemplateMethodBll
from bll.VisitorBll import VisitorBll
from bll.StrategyBll import StrategyBll
from bll.ObserveBll import ObserveBll
from bll.MediatorBll import MediatorBll
from bll.IteratorBll import IteratorBllif __name__ == '__main__':#实现备忘录模式(Memento Pattern)#mementobll= MementoBll()#mementobll.demo()#命令模式(Command Pattern)#commandBll= CommandBll()#commandBll.demo()# 状态模式 State Pattern#stateBll =StateBll()#stateBll.demo()# 模板方法模式 Template Method Pattern#templateMethodBll= TemplateMethodBll()#templateMethodBll.demo()# 访问者模式(Visitor Pattern)#visitor = VisitorBll()#visitor.demo()# 策略模式(Strategy Pattern)#strategyBll = StrategyBll()#strategyBll.demo()# 观察者模式(Observer Pattern)#observeBll= ObserveBll()#observeBll.demo()# 中介者模式(Mediator Pattern)# mediatorBll=MediatorBll()# mediatorBll.demo()# 迭代器模式(Iterator Pattern)iteratorBll=IteratorBll()iteratorBll.demo()print('hi,welcome geovindu.')

  

输出:

image

 

  

 

http://www.jsqmd.com/news/422095/

相关文章:

  • Mike_Zhang
  • ASP Global.asa 文件详解
  • 3.30.画出开环增益曲线(2-画出曲线,确定参数)
  • 提示工程+Blender:架构师教你用自然语言生成动态3D场景
  • 一年进化,NineData社区版凭什么成为数万开发者的首选数据库管理工具?
  • 基于SpringBoot+Vue的宠物交易管理平台设计与实现
  • flutter openharmony项目新手从到的保姆级教程
  • 苹果iOS降级工具详解及未来展望
  • PowerShell 获取 SharePoint Online 站点信息
  • Django 模板
  • Web 品质国际化
  • 06_ownership——所有权的使用
  • Spring Bean销毁机制
  • OpenCV DNN + ONNX 跨框架实时推理实战:PyTorch/TF模型导出ONNX后用OpenCV DNN加速,CPU/GPU实时目标检测
  • CF1034D
  • 使用 Typer + Pydantic + Rich 快速打造企业级 Python 命令行工具
  • 未来之窗昭和仙君(七十六)扫码支付查询函数—东方仙盟练气
  • 为量子互联网“掐表”:基于ZYNQ的皮秒级TDC与自适应温漂补偿系统实战
  • 使用 Rich 库打造专业 CLI 工具:终端美化、Table、Progress、Syntax 高亮、Theme 自定义与 Live 动态 UI 实
  • ionic 列表:全面解析与实战指南
  • QA之二 - 单元测试-- JaCoCo
  • 基于YOLO+deepseek 智慧农业作物长势监测系统 | 基于YOLO+deepseek 人脸识别与管理系统
  • 程序员兼职怎么选到更靠谱的软件外包平台
  • 谷歌NanoBanana 2又刷屏了,一文看懂如何使用
  • 闲置分某乐微信立减金回收方式推荐,高效转化闲置资源 - 京顺回收
  • 2026省选集训比赛总结
  • 校招/社招通用!计算机信息类专业简历写法,面试官一眼看中
  • 别再让AI毁网站了!告别蓝紫渐变,这7招彻底去除AI味,新手也能会 踩坑无数总结的去AI味技巧|从请求者变指挥官,AI做站也能有质感
  • JVM内存模型详解与垃圾回收日志分析
  • 中年不发福的关键!8个好习惯,不用节食,腰腹慢慢变紧致