发布时间:2026/9/4 18:53:16
重新认识生成器generator 基本用法我们清楚, 函数体之中含有yield关键字的函数并非是一个平常的函数, 这一种函数被称作生成器, 通常是用来进行循环处理结构的, 要是应用得恰当的话能够极大程度地优化内存使用效率, 比如说, 去设计一个函数, 将文件打开并且把每一行都转变成大写之后还返还回来:123456defread_file_upper(path):lines []withopen(path)asf:forlineinf:lines.append(line.upper())returnlines这个版本的函数于内部构建了一个 list 对象, 此对象是用来存放转换结果的, for 循环会对文件当中的每一行进行遍历, 把每一行转变成大写之后追加至列表里, 如此这般, 文件里的每一行都得保存在列表中, 而要是文件规模很大, 那么内存开销的情况便可想而知了。我们能够借助yield关键字, 把函数转变为生成器版本, 函数主体的逻辑不存在任何改变, 仅仅是将每行数据的处理结果借助yield逐个予以返回, 并非是在收集到list对象之后再进行返还。1234defiter_file_upper(path):withopen(path)asf:forlineinf:yieldline.upper()要是当下存在一个文本文件data.txt, 其里面涵盖着如下内容:hello, world life is short, use python my wechat id is: coding-fan bye用 生成器我们可以这样对它进行处理123456forlineiniter_file_upper(text.txt): ...print(line.strip())HELLO,WORLDLIFEISSHORT,USEPYTHONMYWECHATIDIS:CODING-FANBYE大致来说, 生成器用法跟函数是差不多一样的, 然而它不会一下子就把文件里所有的数据行都给拿住, 反而是一行一行地去做处理一个一个地返回, 如此一来, 便能把内存的使用量降低到最低限度。行为观察那么生成器为什么会有这样的奇效呢我们接着观察123giter_file_upper(text.txt) ggeneratorobjectiter_file_upperat0x103becd68经过我们进行调用之后, 所得到的是一个生成器对象, 并非是文件处理的结果, 在这个时候, 它还尚未开始执行。在咱们调用 next 函数以便从生成器那里接收紧接着的那个数据之际, 便会着手开始执行, 而后在 yield 所处的那个位置停下来, 并且还会把处于第一行的处理之后所得到的结果返还给咱们:12next(g)HELLO, WORLD\n在这个时候, 生成器所处的状态是暂停, 要是没有我们所给出的指令, 那么它是不会紧接着去处理第二行数据的。当我们再度去执行next函数之时, 生成器又一次恢复进行执行, 去处理下一行的数据, 并且在yield此处又一次暂停:12next(g)LIFE IS SHORT, USE PYTHON\n生成器记住了自身的执行进度, 每当调用next函数时, 它总会去处理并产出下一个数据, 根本无需我们费尽心思去留意操心:1234next(g)MY WECHAT ID IS: CODING-FAN\nnext(g)BYE\n在那代码逻辑执行完结以后, 它会朝着next抛出一个异常, 利用这样的方式去告知调用者它已然结束了:1234next(g)Traceback(mostrecentcalllast):File,line1,inmoduleStopIteration所以, 我们能够将其简单地认定为, for-in循环于虚拟机的内部是按照这样的方式来达成的:在经典的线程模型里, 每个线程有着一个独立的执行流, 且仅能执行一项任务。要是一个程序需要同时去处理多个任务, 那么能够借助多进程或者多线程技术。假定一个站点需要同时为多个客户端连接提供服务, 那样可以为每个连接创建一个独立的线程来予以处理。不管是线程, 还是进程, 在进行切换的时候, 都会带来巨大的开销, 比如说用户态与内核态的切换, 执行上下文的保存以及恢复, 还有CPU缓存的刷新等等。所以说, 利用线程或者进程来驱动小任务的执行, 明显不是一个理想的选择。

相关新闻

2026/9/4 18:53:16

科学智能体基础模型:从工具调用到闭环的科研新范式

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

2026/9/4 18:53:16

谈谈你了解的最常见的几种设计模式,说说他们的应用场景

常见设计模式 & 应用场景(面试Markdown,后端面试高频)设计模式分三大类:创建型、结构型、行为型,挑开发中最常用的来讲,结合业务Spring源码场景。一、创建型模式:负责对象的创建 1. 单例模式…

2026/9/4 18:53:16

Web Audio API声控游戏开发:从音频处理到肺活量测试实战

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

2026/9/4 20:38:29

从零构建PHP图书馆管理系统:数据库设计、事务处理与安全实践

简介:这是一套完整的PHP语言开发的图书馆管理系统网站源码,面向Web开发初学者与中小型项目实践者,解决图书借阅、用户管理、图书检索等核心业务场景的快速搭建需求。资源包含前端页面、后端逻辑及数据库结构,覆盖用户登录、图书增…

2026/9/4 20:38:29

C#点云可视化实战:WinForms+PCL+VTK多视图框架

简介:本资源是一个面向点云可视化开发初学者与中级工程师的C#多视图点云显示基础框架,聚焦解决点云数据在Windows桌面端的高效渲染、多视角交互与可扩展集成问题,适用于自动驾驶标注系统、三维重建工具及工业检测软件等实际场景。压缩包共219…

2026/9/4 20:38:29

Windows磁盘清理全攻略:命令、脚本与开源工具实操

磁盘空间被占满这件事,基本是每个用过 Windows 的人都会撞上的坎。打开资源管理器看到 C 盘变红,不知道从哪里下手;用系统自带的磁盘清理扫了半天,删掉的东西却不多,反而把时间耗进去了。这次我们来看一种更直接的清理…

2026/9/4 20:38:29

为什么给老板的报表千万不能带滚动条:管理层视觉心理学实测

为什么给老板的报表千万不能带滚动条:管理层视觉心理学实测在数据可视化和 BI 看板设计领域,有一个极少被写进教科书、但却决定了无数数据分析师升职加薪与否的隐形铁律:凡是面向管理层和总监级以上汇报的页面,绝对不能出现横向或…

2026/9/4 20:38:29

asyncio 中的 CPU 密集型任务:正确使用 run_in_executor

asyncio 中的 CPU 密集型任务:正确使用 run_in_executor 在 Python 异步开发(asyncio)中,最常见也最致命的架构事故之一就是:在协程主链路中直接执行耗时的 CPU 密集型代码。 很多团队在使用 FastAPI 开发 AI 网关或 …

2026/9/4 20:33:29

快速排序核心机制全拆解:主元、分区与递归边界一次讲透

快速排序大概是很多人第一轮学算法时最痛快、又最心虚的部分。痛快的是动画一放,主元被拎出来,小的往左边丢、大的往右边丢,剩下的交给递归,看起来行云流水;心虚的是,等自己打开编辑器,数组下标…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…