python中yield的用法--浅显易懂

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

yield这个关键词相信大部分初学者第一次都很难弄懂,我也是经过多次的学习忘记,再学习,还有查阅其他人的分享,最后终于搞清楚啦。如果大家想更清晰地了解,建议大家用单步调试调试以下代码:

def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield "return返回的值..."
       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

c = consumer("小华")
print('-------华丽分割线1-------------')
print(c.__next__())
print('-------华丽分割线2-------------')
print(c.__next__())
print('-------华丽分割线3-------------')
c.send("韭菜包")


输出结果:

-------华丽分割线1-------------
小华 准备吃包子啦!
return返回的值...
-------华丽分割线2-------------
包子[None]来了,被[小华]吃了!
return返回的值...
-------华丽分割线3-------------
包子[韭菜包]来了,被[小华]吃了!

下面我们来分析程序的运行过程:
1.程序开始执行以后,因为consumer函数中有yield关键字,所以consumer函数并不会真的执行,而是先得到一个生成器generator(相当于一个对象),

2.直到调用__next__()方法,consumer函数正式开始执行,先执行consumer函数中的print方法,然后进入while循环,

3.程序遇到yield关键字,然后把yield想想成return,return了一个值之后,程序停止,并没有执行赋值给baozi操作,此时__next__()语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(c.__next__())的结果,
4.又开始执行下面的print(c.__next__()),这个时候和上面那个差不多,不过不同的是,这个时候是从刚才那个上次程序停止的地方开始执行的,也就是要执行baozi的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候baozi赋值是None,所以接着下面的输出就是None,

5.程序会继续在while里执行,又一次碰到yield,这个时候同样return,

6.程序执行g.send("韭菜包"),程序会从yield关键字那一行继续向下运行,send会把"韭菜包"这个值赋值给baozi变量,执行print("包子[%s]来了,被[%s]吃了!" %(baozi,name))。

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

相关推荐

yield用法

这里写自定义目录标题模块导入发生了什么一个.py文件的用处 模块导入发生了什么 1.执行导入模块的py文件 2.产生模块.py名称空间,把模块运行中产生的名称都存放在该名称空间 3.在导入的文件中产生模块名的变量,该变量指向步骤2中产生的名称空间 一个.py文件的用处 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 当做模块导入,name’模块名’; 当做程序执行 name=‘main’; 在这里插入代码片

anhui_andy的专栏 1287

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

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

qq_45737042的博客 1万+

高分六号GF-6 WFV数据处理全流程:从原始数据解压到经纬度投影转换

本文详细解析了高分六号GF-6 WFV遥感数据的完整处理流程。从原始数据解压与分块结构理解入手,指导如何安装ENVI国产卫星支持工具进行自动拼接,并重点阐述了利用RPC模型进行正射校正以消除几何畸变,以及将UTM投影转换为地理经纬度坐标的关键步骤。文章旨在帮助用户高效地将原始卫星数据转化为可直接用于农业监测、生态环境分析等领域的标准地理空间图像。

weixin_29047919的博客 196

【Python】yield函数

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

xiaodoudouer的博客 1万+

Qwen-Image-2512 本地部署完全指南:从零开始搭建你的AI绘图工作站

阿里通义团队开源了Qwen-Image-2512模型,这款AI绘图模型在人物真实感、自然细节和文字渲染上表现惊艳,甚至在盲测中超越部分闭源模型。本文提供了详细的本地部署教程,从硬件准备、环境安装到使用ComfyUI运行模型,手把手教你生成第一张AI图片,并分享了进阶技巧和免费在线体验方式。

莫潇羽的个人博客 2426

从URDF到仿真动画:基于Simulink、Simscape与S-Function的机械臂一体化建模与控制

本文详细介绍了从URDF文件到高保真仿真动画的一体化机械臂建模与控制流程。通过整合Simulink、Simscape与S-Function,构建了包含物理特性的虚拟机械臂模型,并实现了自适应滑模等高级控制算法的嵌入与验证。该流程打通了从机械设计到控制算法验证的闭环,为机器人开发提供了高效的仿真平台。

cnn8visionary的博客 697

Python yield的用法

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

细心程度决定你的成败 2981

新手必看:用FileZilla从武大IGS中心下载GNSS数据,再到crx2rnx转换的完整流程

本文详细介绍了新手如何通过FileZilla从武汉大学IGS中心下载GNSS数据,并使用crx2rnx工具将数据转换为RINEX格式的完整流程。涵盖工具准备、FTP连接、文件解压、格式转换及常见问题排查,帮助测绘和地信专业人员高效处理GNSS观测值数据。

weixin_29292431的博客 425

python中yield的用法(生成器的讲解)

0 理解说明 功能1:把yield看做return。就是在程序中yield处返回某个值,返回之后程序就不再往下运行了。他们都在函数中使用,并履行着返回某种结果的职责。 功能2:同时还是一个生成器generator,有return的普通函数直接返回所有结果,程序终止不再运行,并销毁局部变量;而有yield的函数则返回一个可迭代的生成器generator对象,你可以使用for循环或者调用next()方法,send()方法遍历生成器对象来提取结果。 1 举2个例子说明yield生成迭代器: python生成器

呆呆象呆呆的博客 2万+

高速光耦在隔离串口通信中的选型与优化策略

本文深入探讨了高速光耦在隔离串口通信中的关键作用与选型优化策略。针对串口通信中因普通光耦响应慢导致的误码问题,文章详细分析了响应时间、电流传输比、供电电压与隔离耐压等核心选型指标,并对比了6N137、HCPL-0601等主流型号。同时,提供了电路设计、PCB布局的优化技巧及实用的调试指南,旨在帮助工程师实现高速、稳定的隔离串口通信。

grpc6streamer的博客 322

自适应IIR格型滤波器的Matlab实现

概述 在现有的众多抑制窄带干扰的信号处理手段中,时域自适应陷波干扰抑制技术具有实现简单、抗干扰性能好等优点。IIR陷波器按照结构可以分为直接型和格型两种。相比自适应直接型IIR陷波器,自适应格型IIR陷波器不仅可以准确地控制滤波器的陷波频率,也可以准确地调整陷波器的带宽。 传递函数 二阶自适应IIR格型陷波器的传递函数H(z)为: 其中α与陷波带宽有关,β与陷波频率有关;对应的结构如下图所示: Matlab算法实现 ...

剑藏锋的博客 2799

Python中yield的用法详解

yield关键字是Python中创建生成器的强大工具,它允许函数在保持状态的同时,一次返回一个值。这不仅使得代码更加简洁,而且提高了内存效率,特别是在处理大型数据集或需要懒加载的场景中。通过本文的介绍和示例,你应该对yield的用法有了更深入的理解。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章彻底理解Python中的yieldpython中yield的用法详解——最简单,最清晰的解释_yield python-优快云博客。

ning的博客 2107

国家自然基金研究方向选定后,关键词只能下拉吗?——不是的,国家自然科学基金(NSFC)的关键词并不是只能下拉选择,而是:[特殊字符] “可选 + 可填”的混合模式(但以规范词为主)

你可以手动输入关键词用于表达新兴方向或细分领域✔ 适用情况:新概念(如“电场调控纳米流体”)交叉领域(如“电流体力学传热耦合”)电场调控电流体力学可以自己填,但必须以系统标准关键词为主,自定义为辅如果你愿意,我可以帮你做一件更关键的事:👉根据你题目,反向设计“最容易中标”的关键词组合 + 学科代码搭配这个比写内容本身还更影响送审质量。你可以手动输入关键词用于表达新兴方向或细分领域✔ 适用情况:新概念(如“电场调控纳米流体”)交叉领域(如“电流体力学传热耦合”)电场调控电流体力学。

qq_15963745的博客 81

python中yield函数的用法

yield 和 return有一定的练习 return:在函数中返回某个值,然后函数结束运行。一般没有返回值类型,就不用写return yield:带yield的函数是一个迭代器,在函数内部碰到yield 的时候,函数会返回某个值,并停留在这个位置,当下次执行函数后,会在上次停留的位置继续运行。 我们来看一个了例子: def foo(): print("strat...") while True: y=yield 1 print("y:{0}".format(

shenbossed的博客 4864

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 900

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python3的yield用法

Python3的yield用法 前言 在学习爬虫时,出现yield关键词,不明白他的用法,看了篇文章给了我启发,在其基础上还发现一些特征。我的Python水平低,不知道理解的对不对,还请评论指出错误。本文在Python3.8环境下运行 正文: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(genera

qq_41631806的博客 2616

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python中yield的用法

在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。 生成器 如果在一个方法内,包含了 yield 关键字,那么这个函数就是一个「生成器」。 生成器其实就是一个特殊的迭代器,它可以像迭代器那样,迭代输出方法内的每个元素。 我们来看一个包含 yield 关键字的方法: # coding: utf8 # 生成器 def gen(n): for i in range(n): yield i g = gen(5)

vincent_duan的专栏 3216

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python yield 用法详解

文章目录1. 背景2. 如何生成斐波那契數列清单 1. 简单输出斐波那契數列前 N 个数清单 2. 输出斐波那契數列前 N 个数第二版清单 3. 通过 iterable 对象来迭代清单 4. 第三个版本清单 5. 使用 yield 的第四版清单 7. 使用 isgeneratorfunction 判断清单 8. 类的定义和类的实例清单 9. 另一个 yield 的例子3. next停止的位置 1. 背景 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓

爱死亡机器人 1449

「详解」Python中yield的用法

文章摘要: yield关键字用于创建生成器函数,这种函数不会一次性执行完毕,而是可以暂停和恢复执行。生成器通过yield返回一个值并暂停,下次调用时从上一次暂停处继续执行。与普通函数不同,生成器保存了函数状态,实现了惰性计算。yield from语法可以简化生成器嵌套。生成器典型应用包括:处理大文件流(逐行读取避免内存不足)、生成无限序列、构建数据处理管道等。生成器还支持双向通信,通过.send()方法可以传递值给生成器。

绿色羽毛 1882

python yield函数的用法

什么是yield函数? yield函数是python里面的关键字,带有yield的函数相当于一个生成器generator.当你使用一个yield的时候,对应的函数就是一个生成器 在python里面类似于return函数,他们主要的区别就是:遇到return会直接返回值,不会执行接下来的语句.但是yield并不是,在本次迭代返回之后,yield函数在下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行 下面是案例分析: 案例一: def gen_generator(): yiel

qq_42907061的博客 1万+

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

Python|yield的解析及用法

欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。欢迎加入团队圈子!与作者面对面!直接点击!1 什么是yi...

算法与编程之美 1704

Python中yield和yield from的用法

Python中yield和yield from的用法 </h1> <div class="clear"></div> <div class="postBody"> yield python中yield的用法很像return,都是提供一个返回值,但...

kyle1314608的博客 764

一张图理解yield 瞬间明白yield用法

python yield 用法

大义Python 1万+

【Python系列】Python 中 yield 关键字

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

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2027
上一篇: Python与MySQL交互
下一篇: 关于爬虫新建工程scrapy startproject出错的问题
ErikChan.hk
博客等级 码龄12年 107粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值