4【python】:迭代器,生成器,装饰器
1. 迭代器// C语言 int cards[] {1, 2, 3, 4}; for (int i 0; i 4; i) { printf(%d\n, cards[i]); }# Python cards [1, 2, 3, 4] for card in cards: print(card)_iter_的意思 我能被迭代在写 for card in cards 时Python会先调用cards 的 __iter__ 方法来确认这个列表是否支持迭代通俗说__iter__就像在问你能被一个一个取出来吗列表说能返回一个迭代器数字说不能报错① 字符串、列表、元组、字典、文件...都是可迭代对象迭代器一定也是可迭代对象② 迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。迭代器只能往前不会后退。_next_的意思 给我下一个当Python在循环时它会不断调用迭代器的 __next__ 方法每次调用都返回下一个元素通俗说__next__就像在说再给我下一个有元素 → 返回元素没有元素 → 说没了StopIterationStopIteration 的意思 没了当迭代器取完所有元素再调用 __next__ 时它会抛出 StopIteration 异常来告诉Python没东西了停止循环吧比如你在写上面那个card的python代码时Python内部执行了这个剧本# 第1步问列表你能被迭代吗 调用 cards.__iter__() it iter(cards) # 获取迭代器 # 第2步循环开始 while True: try: # 第3步问迭代器给我下一个 调用 it.__next__() card next(it) # 第4步拿到元素执行循环体 print(card) # 第5步迭代器说没了 跳出循环 except StopIteration: break2.生成器生成器到底是什么东西它是一个函数用def写的但这个函数里用yield代替了return调用时不执行只是制造了一个生成器对象next()才执行跑到yield就暂停把值返回状态自动保留再next()它从刚才停下来的地方继续干生成器就是一个可以暂停的函数暂停的时候还能返回一个值给你下次叫它的时候它接着干。 和普通函数的区别普通函数用 return你叫它它就从头到尾跑完跑完了给你一个结果里面的变量全没了生成器函数用 yield你叫它它不跑只是给你一个遥控器你按一下next()它跑一段就停给你一个值里面的变量全都留着下次按遥控器继续生成器就是迭代器只不过它是用 yield 写出来的迭代器。生成器只能遍历一次遍历完后就用完了第二次是空的。return在生成器里的作用是结束生成器附带的信息会放在异常里而不是作为正常返回值一个生成器函数里可以有多个yield但只能有一个return。return不是用来返回值的是用来彻底结束的。def 厨师(): yield 第一道菜 yield 第二道菜 yield 第三道菜 点菜 厨师() # 厨师站那不动没做菜 print(点菜) # 打印出来是个生成器对象 print(next(点菜)) # 厨师开始做做完第一道就停给你第一道菜 print(next(点菜)) # 厨师接着做做完第二道就停给你第二道菜 print(next(点菜)) # 厨师接着做做完第三道就停给你第三道菜 # print(next(点菜)) # 厨师说没菜了报 StopIteration3.装饰器在不修改原函数代码的前提下给函数增加新功能。装饰器 函数包装函数 不修改原代码扩展功能 语法本质是函数替换wrapper 才是真正执行的函数推荐使用 *args, **kwargs 提高通用性支持函数、类、甚至带参数的装饰器 第一步你本来有一个函数#假设你写了这样一个函数 def say_hello(): print(Hello!) #现在调用它 say_hello() # 输出Hello! 第二步你有了一个新需求你现在想让这个函数在执行前后各打印一行像这样Hello! 第三步最直接的办法但不推荐#你直接改原函数 def say_hello(): print() print(Hello!) print()这样确实能达到效果但问题是如果以后有 10 个函数都要加边框你要改 10 次。而且如果你想把边框改成-----你又要改 10 次。 第四步你想出一个办法你心想我能不能不修改原函数但调用它的时候自动加上边框#于是你写了一个包装函数 def add_border(func): def wrapper(): print() func() # ← 这里调用原函数 print() return wrapper这个add_border函数的作用是接收一个函数比如say_hello在内部定义一个新函数wrapperwrapper里先打印边框 → 调用原函数 → 再打印边框返回这个wrapper注意add_border没有修改say_hello它只是造了一个新函数wrapper这个新函数里包含了原函数 边框。 第五步你把原函数替换掉你现在有一个原函数say_hello和一个包装函数add_border。say_hello add_border(say_hello)这行代码在做什么右边的add_border(say_hello)把say_hello传给add_border返回wrapper左边的say_hello 把这个wrapper赋值给变量say_hello现在say_hello不再指向原来的函数了它指向wrapper 被装饰后原函数被替换了。但wrapper内部会调用原来的say_hello所以原来的功能还在只是多了边框。 第六步你现在调用say_hello()#现在再调用函数 say_hello() #因为 say_hello 现在指向 wrapper所以实际执行的是wrapper def wrapper(): print() 原来的 say_hello() # 打印 Hello! print() #输出 Hello! 第七步语法糖你觉得每次都要写say_hello add_border(say_hello)太麻烦了Python 提供了更简单的写法add_border def say_hello(): print(Hello!)这个add_border和say_hello add_border(say_hello)做的事情完全一样只是写法更简洁了。

相关新闻

基于Linux系统文件操作超详细版

基于Linux系统文件操作超详细版

一 linux系统编程 1.linux系统架构 (1)用户空间 应用空间 (2)内核空间 驱动--------本质上是用来驱动硬件的软件程序 操作系统------软件和硬件的大管家 系统调用 ------向用户空间提供内核功能的接口 以函数的的方式提供使…

2026/10/13 13:41:53 阅读更多 →
工商服务小程序开发公司有哪些?哪个更适合零基础新手?

工商服务小程序开发公司有哪些?哪个更适合零基础新手?

工商服务小程序开发公司有哪些?哪个更适合零基础新手?先看一组数据。据艾瑞咨询2025年Q3《中国小程序市场研究报告》,中国小程序市场规模已达到4200亿元,同比增长38%,企业渗透率达68%。截至2025年第三季度,…

2026/10/7 22:21:32 阅读更多 →
破解物理AI技术困局(37):TVA攻克多智能体协同难题

破解物理AI技术困局(37):TVA攻克多智能体协同难题

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/10/13 3:52:13 阅读更多 →

最新新闻

稳定细胞系构建与高表达克隆筛选:从瞬时转染到稳定株的完整指南

稳定细胞系构建与高表达克隆筛选:从瞬时转染到稳定株的完整指南

上个月接了一个蛋白药物早期研发的需求。对方上来就问:稳定细胞系构建怎么收费,能不能顺便帮筛几个高表达克隆。多聊了几句我才搞清楚,他们刚用瞬时转染跑完一轮预实验,分泌量看着不错,团队内部已经把预算和排期都排到…

2026/10/14 10:11:49 阅读更多 →
PTA C++编程题解题攻略:常见题型与踩坑经验总结

PTA C++编程题解题攻略:常见题型与踩坑经验总结

1. 拿到PTA编程题,先别急着敲代码这些年我在某高校带过好几轮C上机课,也帮着学弟学妹们辅导过不少PTA的作业题,发现大多数人卡住的原因其实不是代码能力不够,而是打心底里没把“编程题”当成一道需要审题、拆解的工程题来做。大一…

2026/10/14 10:11:49 阅读更多 →
自托管PS5游戏库与硬件维护:一个极简Web面板的设计实践

自托管PS5游戏库与硬件维护:一个极简Web面板的设计实践

任何一台PS5,玩久了都会攒出一堆散乱的数字资产:买过的游戏、还没补的DLC、借给朋友的光盘、上次清灰的时间、某个账号里卡在80%的奖杯列表。身边不少人用Excel或者手机备忘录在记,但一旦跨设备、跨主机、跨朋友借还,很快就乱成一…

2026/10/14 10:11:49 阅读更多 →
LiteLLM实战:统一大模型API接入与代理网关部署指南

LiteLLM实战:统一大模型API接入与代理网关部署指南

如果你手上同时要接好几家大模型的 API,估计你早就被“每家一套请求格式、鉴权方式、限流策略”磨到没脾气。litellm就是干这个的:一个 Python 库,也是一个可以独立部署的代理网关,把各家大模型接口统一成一套调用方式&#xff0c…

2026/10/14 10:11:49 阅读更多 →
Excel SUMIFS函数详解:多条件求和高阶技巧

Excel SUMIFS函数详解:多条件求和高阶技巧

1. 为什么需要SUMIFS函数? 刚接触Excel那会儿,我经常被各种销售报表折磨得焦头烂额。记得有次老板让我统计"华东地区手机品类在Q2的销售额",我硬是用了三个辅助列才勉强算出来。直到后来发现了SUMIFS这个神器,才发现原来…

2026/10/14 10:11:49 阅读更多 →
Django+Flask智能营销系统:银行数字化转型实战

Django+Flask智能营销系统:银行数字化转型实战

1. 项目背景与核心价值在金融数字化转型浪潮中,银行业务营销正从传统人工经验驱动转向数据智能驱动。这个基于DjangoFlask的智能营销系统,正是利用爬虫技术获取多维金融数据,通过大数据分析生成客户画像,最终以可视化大屏呈现营销…

2026/10/14 10:10:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →