python中的yield关键字用法

【Python】一篇文章读懂yield基本用法 一个例子搞定 yield 机制 阅读详情

在Python中,`yield`关键字的使用场景主要与生成器的特性相关,以下是其核心使用时机和典型场景的总结:

一、**需要节省内存时** 


当处理大规模数据集或流式数据时,`yield`允许按需生成数据,而不是一次性加载到内存中。  
• 典型场景:逐行读取大文件、处理网络数据流、分批处理数据库查询结果。  

• 示例:  

  ```python
  def read_large_file(file_path):
      with open(file_path) as f:
          for line in f:
              yield line.strip()  # 每次仅处理一行,避免内存溢出
  ```

二、**生成无限序列或动态数据** 


当需要生成无限序列(如斐波那契数列)或动态数据时,`yield`允许逐步生成值,而无需预先生成所有结果。  
• 示例:  

  ```python
  def infinite_sequence():
      num = 0
      while True:
          yield num
          num += 1
  # 使用时通过循环或next()按需取值
  ```

---

三、**实现协程与状态保留** 


`yield`可以暂停函数执行并保留局部变量状态,适用于需要多任务协作的场景。  
• 典型场景:  

  1. 协程控制:通过`send()`方法向生成器发送数据,实现双向通信。  
  2. 异步编程:在旧版Python中结合事件循环实现异步操作(新版推荐用`async/await`)。  
• 示例:  

  ```python
  def echo():
      while True:
          received = yield  # 暂停并接收外部输入
          print(f"Received: {received}")

  gen = echo()
  next(gen)        # 初始化生成器
  gen.send("Hello")  # 输出:Received: Hello
  ```

四、**构建数据管道(Pipeline)** 


通过链接多个生成器,可以实现复杂的数据处理流程。  
• 示例:  

  ```python
  def filter_even(numbers):
      for n in numbers:
          if n % 2 == 0:
              yield n

  def square(numbers):
      for n in numbers:
          yield n ** 2

  # 组合生成器
  data = range(10)
  pipeline = square(filter_even(data))
  for result in pipeline:
      print(result)  # 输出偶数的平方
  ```

---

五、**自动化测试中的资源管理** 


在测试框架(如`pytest`)中,`yield`用于管理测试资源的初始化和清理(`setup/teardown`)。  
• 示例:  

  ```python
  import pytest

  @pytest.fixture
  def database():
      conn = connect_db()  # 初始化数据库连接
      yield conn           # 测试代码使用conn
      conn.close()         # 测试结束后自动清理
  ```

---

六、**何时选择`yield`而非`return`**


• 使用`yield`的场景:  

  1. 需要逐步生成结果(惰性计算)。  
  2. 需要保留函数执行状态(如迭代中途暂停)。  
  3. 处理大数据或无限序列以节省内存。  
• 使用`return`的场景:  

  1. 需要一次性返回所有结果。  
  2. 无需保留函数执行后的状态。  

---

总结
`yield`的核心价值在于其按需生成和状态保留的特性,适用于内存敏感、流程控制复杂或需要协程协作的场景。相比之下,`return`更适合简单的值返回。合理选择二者可以显著提升代码性能和可维护性。

yield 在 Python 中的用法详解 ‌特性‌‌生成器 (yield‌‌普通函数 (return‌‌返回值‌生成器对象(可迭代)单次返回值‌内存占用‌低(逐项生成)高(需预加载所有数据)‌执行状态‌可暂停和恢复一次性执行完成‌适用场景‌大数据、无限流、协程明确结果的简单计算掌握yield可以显著提升代码的内存效率和灵活性,尤其在处理流式数据或异步任务时。 阅读详情

相关推荐

Python | yield关键字详解

yield是 Python 中的一个关键字,它通常与生成器函数一起使用。yield就是保存当前程序执行状态。你用 for 循环的时候,每次取一个元素的时候就会计算一次。用yield的函数 叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节省很多空间。generator每次计算需要上一次计算结果,所以用yield,否则一return,上次计算结果就没了。yield可以简单理解为return操作,但和return又有很大的区别,执行完return。

教师中的射鸡师 1170

python中yield的用法详解——最简单,最清晰的解释

python-迭代器与生成器-笔记1前言一、什么是迭代器与生成器?1.可迭代对象2.可迭代对象有哪些?3.迭代器二、什么是列表推导式?1.列表推导式;2.yield关键 -->生成器函数使用生成器实现斐波拉契数列手动关闭当前生成器,关闭之后不能再继续生成值*3.小案例:总结 前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 一、什么是迭代器与生成器? 1.可迭代对象 实现了__iter__方法,并且该方法返回一个迭代器 这样子的对象就是一个可迭代..

qq_45737042的博客 1万+

从球谐函数到哈希编码:Instant-NGP如何重构NeRF的数学基础

本文深入解析了Instant-NGP如何通过多分辨率哈希编码重构NeRF的数学基础,显著提升训练速度和渲染效率。对比传统球谐函数,哈希编码在计算复杂度、频率适应性和内存访问效率上具有明显优势,为实时神经渲染技术开辟了新方向。

weixin_29240711的博客 418

【Python】yield函数

在Python中,yield关键字主要用于生成器函数(generator functions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会一次性将所有结果都加载到内存中。yield函数属性当一个函数包含yield关键字时,这个函数就变成了一个生成器函数。调用生成器函数并不会立即执行函数体内的代码,而是返回一个生成器对象。生成器对象可以被迭代,每次迭代时,生成器函数会从上次离开的地方继续执行,直到遇到下一个yield语句,然后返回一个值,并保存当前状态,以便下次继续执行。

xiaodoudouer的博客 1万+

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2862

手把手教你学Simulink——基于重复控制(RC)的并网逆变器场景实例:基于RC的单相并网逆变器仿真

本次教程深入剖析了重复控制(RC)在单相并网逆变器中的应用,解决了周期性谐波抑制这一核心难题。核心收获RC是谐波抑制的“核武器”:它利用内模原理,对所有周期性谐波提供无限大增益,实现理论上无静差的跟踪和抑制。PI+RC是黄金组合:PI提供快速响应,RC提供稳态精度,二者结合,兼顾了动态与稳态性能。结构简单,效果卓越:相比多个PR控制器,RC仅需一个模块,即可抑制所有谐波,设计简洁。电能质量的终极追求,是波形的纯净。重复控制,如同一位不知疲倦的校对员它记住每一次错误(上一周期的误差),

MHD0815的博客 189

Python yield的用法

yield yield当用在函数中时,将函数变为一个generator function。意思是,如果def的函数内存在yield 则函数被调用时,是不进行执行的,除非使用next yield 可以被用作表达式(Expression)。作用是将其返回的至赋值给某个变量。 yield 被用在函数中def h(): print("你好") yield 5 print("再见")当

细心程度决定你的成败 2981

Allegro如何导出和导入器件模型Signal_Model操作指导

在用Allegro做PCB设计的时候,通常需要给器件加上Signal_Model,在做等长的时候用到的非常频繁。如下图,需要把R7002的Signal_Model导入到另外一块没有给R7002加好模型的BRD中。Allegro除了可以给器件添加模型,还支持从一块加好模型的BRD导入到另外一块BRD中,如何导出和导入器件模型Signal_Model操作指导。

weixin_54787054的博客 1896

python 关键字 yield 用法

python 关键字 yield 用法yield 的基本用法 yield 词典里有两个解释:产出和让步 1.produce or provide (a natural, agricultural, or industrial product). “the land yields grapes and tobacco” 2.give way to arguments, demands, or pre...

u010713350的博客 574

【TC3xx芯片】TC3xx芯片PFlash的ECC校验问题补充

TC3xx芯片PFlash的ECC校验问题补充

qq_36056498的博客 1153

CANbus收发器ADM3053BRWZ-REEL7应用原理图设计

ADM3053 在 CAN 协议控制器与物理层总线之间创建一个 完全隔离的接口。该器件具有限流和热关断特性,可防止输出短路。额定温 度范围为工业温度范围,提供 20 引脚、宽体 SOIC 封装。该器件采用 5 V 单电源供电, 提供完全隔离的 CAN 解决方案。ADM3053 是一款隔离式控制器区域网络 (CAN) 物理层收 发器,集成隔离 DC/DC 转换器,符合 ISO 11898 标准。该器件采用 ADI 公司的。Coupler® 技术,将双通道隔离器、 CAN 收发器和 ADI 公司的。

zhusl6688的博客 1236

【Python系列】Python 中 yield 关键字

传统函数在返回结果后会释放所有资源并忘记之前的执行状态,而生成器函数则能够记住它的状态,在需要时继续产生下一个值。:普通函数从开始执行到 return 语句后立即退出,而生成器函数在遇到 yield 时会暂停执行,保存所有局部变量状态,等待下一次调用。调用生成器函数时,不会立即执行函数体,而是返回一个生成器对象。:普通函数返回一个具体的值或对象,生成器函数返回一个生成器对象,这个对象遵循迭代器协议。函数或在 for 循环中迭代时,生成器函数会从上次暂停的位置继续执行,直到遇到下一个。异常,表示迭代结束。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2027

13、7自由度机械臂混合逆运动学算法解析

本文介绍了一种针对7自由度机械臂的混合逆运动学算法,通过引入额外参数Φ解决冗余自由度问题,并实现了避障、避免关节超限和扩大工作空间。该方法采用解析逆运动学求解策略,克服了机械臂在奇异位姿时的配置不连续性问题。通过对比实验验证了该算法在腕部关节角度连续性和位姿可达性方面的优越性,同时结合躯干逆运动学显著扩展了机械臂的工作空间。

rgv23456789的博客 236

Python yield关键字

yield是 Python 中的一个,它用于定义生成器函数。生成器是一种特殊的迭代器,它可以在遍历过程中逐步产生值,而不是一次性生成所有值并将其存储在内存中。这使得生成器非常适合处理大量数据或无限序列,因为它们只在需要时才生成下一个值,从而节省了内存。当你在一个函数中使用yield语句时,这个函数就变成了一个生成器函数。调用生成器函数并不会立即执行其中的代码,而是返回一个生成器对象。当对这个生成器对象进行迭代(例如通过for循环或者调用next()

铁马冰河入梦来 1289

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1210

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何理解Python关键字yield

语句中的对象都可以叫做可迭代对象,例如:lists,strings,files等等。这些可迭代对象使用非常方便因为它能如你所愿的尽可能读取其中的元素,但是你不得不把所有的值存储在内存中,当它有大量元素的时候这并不一定总是你想要的。可迭代对象是任何你可以从其得到一个迭代器对象的任意对象(译注:调用内建函数iter()),迭代器是能让你在可迭代对象上进行迭代的对象(译注:这里好绕,迭代器实现了。方法的类都是可迭代对象,此外,可迭代对象还可以用在zip,map等函数中,当一个可迭代对象作为参数传递给内建函数。

mohen_777的博客 2093

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python关键字之 yield

今天来聊聊 python 关键字中的 yield,大部分人刚开始学的时候都会对 yield,还有 yield 和 return 之间有些疑惑吧,好,今天就来聊聊 其实这个问题早已在 Stack Overflow 上聊过啦,也有大神给出了非常满意的答案(让迷弟心生敬佩)(链接在这里) 不过是英文的,我先把一些比较基础的 yield 翻译出来吧 以下是我翻译的内容: 为

Charles的博客 5648

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python中yield_使用Python中的示例的yield关键字

python中yield Python yield关键字 (Python yield keyword) yield is a keyword (case-sensitive) in python, it is used to suspend the execution of a function and returns the value, if next time function calls,...

cumubi7552的博客 226

python中的yield关键字

本文介绍了Python中yield关键字的核心作用与典型用法。yield能将普通函数转为生成器,实现值产出后暂停执行、保留状态的功能。主要应用场景包括:惰性计算节省内存、可中断流程、大数据流处理等。基础用法展示了生成器的创建和迭代,进阶用法介绍了send()实现协程通信和yield from委托子生成器。文章还列出了常见错误如首次必须next()预热、避免直接raise StopIteration等,并提供了使用小抄:内存优化用yield,迭代组合用yield from,双向通信配合.send(),结果收集

keyboard专栏 784

python关键字yield的使用

python关键字yield的使用yield简介可迭代对象生成器yield的作用yield的好处 yield简介 yeild是python的关键字。如果你要了解yield的作用,你必须要了解生成器(generators),了解生成器之前你需要了解什么是可迭代对象(iterables)。 可迭代对象 当你创建一个列表,你可以遍历这个列表,读取它的每一个元素,逐个读取列表元素的过程称为迭代(itera...

wu860354668的博客 555

Python中的yield关键字

yield的高级用法包括生成器的状态保存,允许无限递增或递减的生成器。还可以与条件结合使用,用于过滤生成的值,仅生成符合特定条件的值。最重要的是,yield支持懒惰计算,允许在需要时计算值,而不是一次性计算所有值,从而节省内存和计算资源。在处理大型数据集、无限序列或需要逐个生成值的情况下,yield是一个强大的工具。通过深入理解yield,可以更好地利用生成器和懒惰计算,提高代码的效率和可维护性。

Saki_Python的博客 688

Python关键字yield

yield关键字一. yield简介二. 可迭代对象三. 生成器四.yield的作用五.yield的好处 一. yield简介 yeild是python的关键字。如果你要了解yield的作用,你必须要了解生成器(generators),了解生成器之前你需要了解什么是可迭代对象(iterables)。 二. 可迭代对象 当你创建一个列表,你可以遍历这个列表,读取它的每一个元素,逐个读取列表元素的过程称为迭代(iteration)。 mylist = [2,3,4,5] for i in mylist: p

木讷的鱼 1904

Python的yield关键字

忽然得知Python有个叫yield的关键字,好奇之下去查了查,花了点时间基本弄明白了,故写在此备忘,顺便充充字数。yield关键字用来定义生成器(Generator),其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行。也就是说,yield返回函数,交给调用者一个返回值,然后再“瞬移”回去,让函数继续运行, 直到吓一跳yield语句再返回一个新的值。使用yield返回后,调用者实际得到的是一个迭代器对象,迭代器的值就是返回值

tossgoer的专栏 1728

python关键字及用法_Python关键字yield用法

点击量:237(在苹果系统下,如果文章中的图片不能正常显示,请升级Safari浏览器到最新版本,或者使用Chrome、Firefox浏览器打开。)我这篇文章将简单记录一下python关键字yield的用法。因为写代码需要,我看到了别人的部分代码中有用到yield关键字。作为习惯了C类语言的人,第一次看到这种关键字会感到很迷茫,不知道是用来做什么的,可是偏偏很多时候会用到这样的代码。经过查找资料,我...

weixin_39721924的博客 104
上一篇: python3.11.9下载地址
下一篇: load_dotenv()详解
老兵发新帖
博客等级 码龄15年 1231粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值