尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
python中的迭代器与生成器
迭代器两个基本的方法iter()和next()__iter__() 方法返回一个特殊的迭代器对象 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。__next__() 方法会返回下一个迭代器对象。核心区分class MyNumbers: def __iter__(self): self.a 1 return self # 返回自己作为迭代器 def __next__(self): x self.a self.a 1 return x myclass MyNumbers() it iter(myclass) # 执行 __iter__self.a1返回对象self print(it) # 打印对象__main__.MyNumbers object at 0x... print(next(it)) # 调用 __next__ → 1 print(next(it)) # 调用 __next__ → 2iter(x)→ 调用x.__iter__()得到迭代器对象print(iter(myclass)) # 输出类似__main__.MyNumbers object at 0x0000021xxxx打印出来的是对象描述、内存地址不会执行next不会产生 1、2、3 这种数据。执行iter(myclass)的时候会跑__iter__里面代码self.a 1✅状态初始化发生在这里return self返回实例对象但是不会调用__next__不会计算、不会返回数字这一步打印不会输出业务数据数字、列表这些它返回的是迭代器对象本身打印对象看到的是对象内存信息不是迭代产出的值。next(迭代器对象)→ 调用__next__()才拿到实际的元素值it iter(myclass) print(next(it)) # 输出 1一句话记忆iter()负责造迭代器工具next()负责驱动工具产出数据。总结表格代码执行的方法返回什么print 之后看到什么iter(x)x.__iter__()迭代器对象对象内存信息没有业务数据next(it)it.__next__()迭代出来的元素真实数据比如1,2,3易错点提醒__iter__只是做初始化、返回迭代器真正产生每一个值是交给next/ next()。就算__iter__内部初始化了self.a1这个 1 只是变量状态不会自动跑出来必须等next()调用__next__才会取出来返回。生成器函数带 yield只要 Python 看到函数定义体内存在 yield它就把这个函数标记为生成器函数。def gen(): yield 10 g gen() # 等价于 iter(...) 的效果拿到生成器迭代器对象。生成器自动实现iter和next,简化代码 print(g) # generator object gen at 0x...打印对象拿不到10 print(next(g)) # 10next才会拿到产出的值运行实例def gen(): print(开始执行函数内部) yield 100 g gen() # 第0步仅仅构造生成器,返回一个生成器对象这个对象处于休眠状态需要next唤醒并没有执行函数 print(这里是g gen()之后)#打印结果 print(next(g))#激活对象之后开始执行函数根据函数定义先打印开始执行函数内部再通过yield输出100调用生成器函数时不执行函数里面任何一行代码直接返回一个「生成器对象」保存函数的入口位置、局部变量的上下文这个对象处于休眠状态等着 next() 来唤醒yield 不是 return。yield 是暂停指令它生效的前提是代码执行流走到这一行。 没被 next 唤醒代码流根本走不到 yield a 那一行自然不可能输出 a。#以下是执行结果 这里是g gen()之后 开始执行函数内部 100区分两件事极易混淆函数定义里面写了 yield只是告诉 Python这是生成器。此时什么都不发生。程序执行流运行到 yield 这行语句才会暂停 向外产出值。写在代码里 ≠ 程序已经跑到这行执行了。一句话记住规则写yield a≠ 立刻把 a 算出来返回yield a只是定义了一个「将来被 next () 调用时要产出什么值」。函数只有遇到 next () /for 循环才会真正跑内部代码。
RELATED

相关推荐

如何用trackerslist项目彻底解决BT下载慢的问题:终极配置指南

如何用trackerslist项目彻底解决BT下载慢的问题:终极配置指南

如何用trackerslist项目彻底解决BT下载慢的问题:终极配置指南 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 你是否曾经面对BT下载时那令人沮丧的进度条&#…

📅 2026/10/31 12:11:26
OpenClaw与Claude Code架构对比及AI开发实践

OpenClaw与Claude Code架构对比及AI开发实践

1. OpenClaw与Claude Code技术架构对比OpenClaw和Claude Code作为当前AI开发领域的热门工具,在架构设计上展现出惊人的相似性。这两个项目都采用了模块化的微服务架构,核心组件包括模型推理引擎、API网关、任务调度器和插件管理系统。从GitHub上的源码结…

📅 2026/8/27 1:55:37
如何快速修复幻兽帕鲁存档:跨服务器无损迁移的终极解决方案

如何快速修复幻兽帕鲁存档:跨服务器无损迁移的终极解决方案

如何快速修复幻兽帕鲁存档:跨服务器无损迁移的终极解决方案 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedicated servers…

📅 2026/8/30 15:39:18
MORE NEWS

更多资讯

📰

SAP功能范围损益表:S_ALR_87012284到S_PL0_86000028

简介:面向SAP FI财务模块使用者、报表实施顾问与成本分析人员,这份文档围绕F.01损益表功能范围的实现展开,重点解决传统总账报表无法体现功能范围、期间费用与利润表项目难以对应分析的问题。内容从S_ALR_87012284与S_PL0_86000028、S_PL0_86…

📰

RabbitMQ客户端核心机制与生产实践指南

1. RabbitMQ客户端基础概念与核心机制 RabbitMQ作为AMQP协议的标准实现,其客户端操作与传统TCP/UDP/HTTP通信有着本质区别。理解这种差异是正确使用RabbitMQ的前提。RabbitMQ服务本身不处理业务逻辑,而是作为消息代理(Message Broker&#xf…

📰

Copilot作为工作OS与智能体失控的工程真相

1. 这不是概念炒作,而是工作方式的临界点 今天刷到“微软把 Copilot 叫‘工作OS’,OpenAI 的智能体却‘失控’了”这个标题,我正蹲在客户现场调试一个跨部门审批流自动化脚本,手边咖啡凉了一半。没点开任何链接,先放下…

📰

HTML入门指南:从基础语法到现代Web开发实践

1. 初识HTML:Web世界的基石 HTML(HyperText Markup Language)是构建万维网的基石语言。作为前端开发的入门必修课,它定义了网页内容的结构和语义。想象HTML就像建筑物的钢筋骨架——虽然看不见最终装饰效果,但决定了整…

📰

单链表前插与后插的本质差异及工程实践指南

1. 为什么“前插”比“后插”更考验基本功?单链表的前插与后插,表面看只是插入位置一前一后,但实际动手写代码时,我见过太多人卡在“前插”这一步——不是逻辑错,而是对单链表本质的理解存在断层。很多人学完单链表&am…

📰

LabVIEW测试框架模板:提升自动化测试效率与维护性

1. LabVIEW测试框架模板的价值定位在工业自动化测试领域,LabVIEW作为图形化编程平台的代表,长期占据着重要地位。但许多测试工程师面临一个现实困境:虽然能够熟练使用LabVIEW完成基本数据采集和仪器控制,但当测试项目复杂度上升时…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬