python中yield关键字

yield和return
理解一个东西最好的办法就是找一个和它类似的东西,然后再搞清楚它们之间的区别。
yield最类似的东西就是return,因为他们起到了同样的作用:返回值。
看这个return的函数:

def have_some_wine():
  print('先开一瓶酒,共有700毫升')
  wine = 700
  while wine > 0:
    # 取酒
    if wine > 200:
      get_wine = 200
      wine = wine - 200
    else:
      get_wine = wine
      wine = 0

    # 把酒送给客人
    print('您的酒来了:200毫升')
    return get_wine
    # yield get_wine


pa = have_some_wine()
print(pa)

在这里插入图片描述
但一旦遇到了return,函数执行就结束了。
下次再调用它,是一次全新的调用,和上一次调用是没有关系的。就算函数中存在多个return也是一样,当遇到第一个return函数也就停止了,
所以我们说它是无状态的。可以理解吧。
yield
假设这样一个场景:我们去酒吧,开了一瓶名贵的啤酒,价值2022元。一次性喝不完,可以保存在酒吧,下次再来喝。
用一个函数来模拟这个开酒的过程:

def have_some_wine():
  print('先开一瓶酒,共有700毫升')
  wine = 700
  while wine > 0:
    # 取酒
    if wine > 200:
      get_wine = 200
      wine = wine - 200
    else:
      get_wine = wine
      wine = 0

    # 把酒送给客人
    print('您的酒来了:200毫升')
    # return get_wine
    yield get_wine


pa = have_some_wine()
print(pa)
for i in pa:
    print(f'我今天喝了{i}')

在这里插入图片描述
注意这个函数的特点:
它没有return关键词,而是用了yield关键词
如果剩下的酒大于200毫升,就用yield关键词返回200毫升
如果剩下的酒小于200毫升,就一次性都返回,这样这个函数的生命周期就结束了。
这就是我说的使用yield的函数是有状态的函数,会记住上次运行的结果,再上次的基础上继续运行或者停止运行。
总结:
yield类似于return,在函数中返回值给调用者。
使用了yield的函数是有状态的函数,后面的调用会基于前面的调用状态继续执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚幻5中Lumen提供哪些功能以及如何工作的

虚幻引擎 5 中的 Lumen 是一个完全动态的全局照明和反射系统。它可以在虚幻引擎 5 中使用,因此创作者无需自行设置。它是为下一代控制台和建筑可视化等高端可视化而设计的。那么它提供了哪些功能以及如何工作? 全局照明 当光离开光源时,它会…

【TI毫米波雷达笔记】MMWave配置流程避坑

【TI毫米波雷达笔记】MMWave配置流程避坑 在TI SDK目录下的mmwave.h文档说明中 强调了要按以下配置: mmWave API The mmWave API allow application developers to be abstracted from the lower layer drivers and the mmWave link API.The mmWave file should b…

【设计模式】适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子&#xff…

Android多渠道打包+自动签名工具 [原创]

多渠道打包自动签名工具 [原创] github源码:github.com/G452/apk-packer 程序体验下载地址:github.com/G452/apk-packer.exe 如果觉得有帮助可以点个小星星支持一下,万分感谢! 使用步骤: 1、在apk-packer.exe目录内放…

【数据结构】“栈”的模拟实现

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

FastAPI入门

目录 FastAPI FastAPI 是什么 为什么要用 FastAPI FastAPI 入门 安装 用 FastAPI 写个接口 调试接口 创建快捷请求 保存为快捷请求 发送请求 总结 FastAPI FastAPI 是什么 什么是 FastAPI 呢? FastAPI 是 Python 的一个框架,如果要类比的话…

Python-OpenCV中的图像处理-形态学转换

Python-OpenCV中的图像处理-形态学转换 形态学转换腐蚀膨胀开运算闭运算形态学梯度礼帽黑帽形态学操作之间的关系 形态学代码例程 形态学转换 形态学操作:腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽等…

① vue复习。从安装到使用

vue官网:cn.vuejs.org vue安装 cnpm install -g vue/cli 查看是否安装成功 vue --version 创建一个项目 vue create vue-demo(项目名称) 这个取消掉。空格可选中或者取消。 运行项目: cd 进入到项目下 npm run serve 运行成功后,访问这…

【Linux】【驱动】驱动框架以及挂载驱动

【Linux】【驱动】驱动框架以及挂载驱动 绪论1.配置开发环境2. 编写驱动文件3. 编译Makefile文件4.编译5. 挂载驱动注意:有些开发板打开了或者禁止了printk信息,导致你看到的实验现象可能不一样,此时已经将文件移动到了开发板中,开发板查看文…

接口mock常用工具

在进行测试时,我们经常需要模拟接口数据,尤其是在前后端分离项目的开发中,在后端未完成开发时,前端拿不到后端的数据,就需要对后端返回的数据进行模拟。 如下一些工具,可以完成接口的mock。 Yapi 首先添…

Redis_安装、启动以及基本命令

2.Redis安装 2.1前置处理环境 VMware安装安装centOS的linux操作系统xshellxftp 2.2 配置虚拟机网络 按ctrlaltf2 切换到命令行 cd (/)目录 修改/etc/sysconfig/network-scripts/ifcfg-ens3 vi 命令 按insert表示插入 按ctrlesc退出修改状态 :wq 写入并退出 此文件必须保持一…

dbm与mw转换

功率值10^(dBm值/10),单位mW。 对于-5dBm,其功率值为0.3162 mW。 dBm 10 * lg(mW)

数学建模(二)线性规划

课程推荐:6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支:数学规划。而线性规划(Linear Program…

深入探索 Spring MVC:构建优雅的Web应用

文章目录 前言一、什么是 Spring MVC1.1 什么是 MVC1.2 什么是 Spring MVC 二、Spring MVC 项目的创建2.1 项目的创建2.2 第一个 Spring MVC 程序 —— Hello World 三、RequestMapping 注解3.1 常用属性3.2 方法级别和类级别注解3.3 GetMapping、PostMapping、PutMapping、Del…

【网络安全】等保测评系列预热

【网络安全】等保测评系列预热 前言1. 什么是等级保护?2. 为什么要做等保?3. 路人甲疑问? 一、等保测试1. 渗透测试流程1.1 明确目标1.2 信息搜集1.3 漏洞探索1.4 漏洞验证1.5 信息分析1.6 获取所需1.7 信息整理1.8 形成报告 2. 等保概述2.1 …

【Linux 网络】网络层协议之IP协议

IP协议 IP协议所处的位置网络层要解决的问题IP协议格式分片与组装网段划分特殊的IP地址IP地址的数量限制私网IP地址和公网IP地址路由 IP协议所处的位置 IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。 网络层要解决的问题 网络…

对于git功能的探索与研究

读前提示 注意: 本文只是面向初学者或者之前并未接触过git而想学习如何初步使用git的读者,如果您很擅长使用git,并善于维护远程仓库,那么不建议您看此篇文章,这会浪费您的时间。 当然,这篇文章还是能很好地…

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…

用chatGPT从左右眼图片生成点云数据

左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…

并发编程--------JUC集合

并发集合 一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CASsynchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash…