当前位置: 首页 > news >正文

【python】yield关键字的使用及执行步骤分析

以下观点仅个人根据代码执行结果推导理解得出!
#生成器函数(使用迭代器yield)
def count_up_to(max_value):
    count = 0
    while count < max_value:
        print('count_up_to',count)
        yield count
        count += 1

#使用迭代器

def useYield():
    # 使用生成器
    for number in count_up_to(5):
        print('useYield',number)

调用useYield方法后执行结果为:

调用后查看打印内容理解生成效果,使用迭代器yield时,count_up_to函数会在yield处暂停,直到再次调用时继续函数的执行

实际效果为:在执行useYield方法开始for循环后先执行count_up_to方法生成count的值为0,然后暂停while循环,回到useYield方法for循环中打印生产的count值,打印变量为number

打印number后结束了当前次的for循环,需要请求下一个值,此时回到count_up_to方法的while循环中,继续执行count+=1操作生成count的值为1,经过条件判断满足循环条件

继续执行while循环,代码执行至yield处暂停执行,回到for循环中执行打印方法,如此反复直至count_up_to方法的while条件不满足后结束while和for循环

个人观点:可以将useYield方法中for的每次循环看成一个“消费者”,而count_up_to方法中的while看成一个“生产者”。当“消费者”需要消费时,先请求“生产者”,“生产者”生产消费内容,并在生产后停止动作,直至“消费者”消费生产的内容后再次发起消费请求时,“生产者”继续进行消费内容的生产。当生产者不满足生产条件时,结束生产和消费动作

http://www.dtcms.com/a/123254.html

相关文章:

  • HTTP 1.0 时代,第一次优化
  • antv x6使用(支持节点排序、新增节点、编辑节点、删除节点、选中节点)
  • ThinkpPHP生成二维码
  • 【C++初阶】--- vector容器功能模拟实现
  • STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性
  • Keras简介
  • AI 赋能 DBA:如何用 DeepSeek 等大模型简化数据库管理工作
  • 【每日随笔】丛林法则 ( 弱肉强食 | 适者生存 | 资源有限稀缺 | 没有道德约束 | 自发性与无序性 | 丛林法则映射 - 资源分配 与 社会分层 )
  • C++23新特性:显式对象形参与显式对象成员函数
  • Unity AssetBundle依赖树可视化分析工具开发指南
  • BeagleBone Black笔记
  • 传感器篇(二)——激光雷达
  • Prompt-to-prompt image editing with cross attention control
  • 网络通讯协议UDP转发TCP工具_UdpToTcpRelay_双向版
  • 蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)
  • 食堂采购系统源码模块化开发详解:管理、订单、入库、对账一体化方案
  • 游戏引擎学习第214天
  • module错误集合
  • SAP Business One系统标准功能之外的不允许负库存控制
  • 使用 react-three-fiber 快速重构 Three.js 场景⚛️
  • 为什么ChatGPT选择SSE而非WebSocket?
  • 【车道线检测(0)】卷首语
  • Go 字符串四种拼接方式的性能对比
  • 从0到1的Python接口自动化学习路线
  • kimi 做关系图
  • 【论文精读与实现】EDC²-RAG:基于动态聚类的文档压缩方法提升检索增强生成RAG性能
  • DeepSeek:重构办公效率的AI新范式
  • PCL 点云随机采样(二)
  • 可发1区的超级创新思路(python 、MATLAB实现):基于SAM+Informer+2DCNN的功率预测模型
  • 数据结构--线性表顺序表示(上)