yield用法理解,配有代码块和解析

这篇具有很好参考价值的文章主要介绍了yield用法理解,配有代码块和解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

包含 yield 关键字的函数,是一个生成器

yield和return的区别

1、return是返回return关键字的值,被调用一次就返回一次,return只能放在一个函数代码块的最后面,运行到return的时候,就结束循环,结束这个函数代码块

2、yield后面可以放置下一行代码,但是每次被循环调用的时候,运行碰到yield就返回yield的值,然后结束这一次调用,内部保留上一次运行的结果,下次调用从yield后面的语句开始执行,直到再次遇到yield

(1)

def testA(a):
    b = [1,2,3]
    print("调用开始")
    for m in range(0,len(b)):
        print("---start---")
        a.append(m)
        yield a
        print("x:",a)

def runtestA():
    a=[4,5,6]
    g = testA(a)
    for i in g:
        print("y:",i)

runtestA()

#运行结果

调用后
调用开始
---start---
y: [4, 5, 6, 0]
x: [4, 5, 6, 0]
---start---
y: [4, 5, 6, 0, 1]
x: [4, 5, 6, 0, 1]
---start---
y: [4, 5, 6, 0, 1, 2]
x: [4, 5, 6, 0, 1, 2]

解析:程序开始运行,调用testA函数,因为里面包含了yield,所以这个函数没有真正运行,而是得到一个生成器g,当开始for循环 i in g的时候,才开始运行testA函数,这也是为什么打印的“调用后”反而在“调用开始”之前 ;

运行testA函数,进入for循环,打印--start–,程序遇到yield,返回a的值,程序停止,然后在runtestA里面继续执行程序,打印y的值;

接着继续运行,就从刚刚遇到yield之后开始运行,打印x的值,为生成器的第一个值,然后在for循环里面继续运行,打印--start–,遇到yield,程序停止。。。一直重复,直到循环结束

(2)

def testA(a):
    b = [1,2,3]
    print("调用开始")
    for m in range(0,len(b)):
        print("---start---")
        a.append(m)
        yield a
        print("x:",a)

def runtestA():
    a=[4,5,6]
    g = testA(a)
    print("调用后")
    for i in g:
        print("y:",i)
        i.pop(0)
        print("newy:",i)


#运行结果

调用后
调用开始
---start---
y: [4, 5, 6, 0]
newy: [5, 6, 0]
x: [5, 6, 0]
---start---
y: [5, 6, 0, 1]
newy: [6, 0, 1]
x: [6, 0, 1]
---start---
y: [6, 0, 1, 2]
newy: [0, 1, 2]
x: [0, 1, 2]

解析:程序开始运行,调用testA函数,因为里面包含了yield,所以这个函数没有真正运行,而是得到一个生成器g,当开始for循环 i in g的时候,才开始运行testA函数;

运行testA函数,进入for循环,打印–start–,程序遇到yield,返回a的值,程序停止,到这里都和第一个代码的流程一样;

接着运行 runtestA,打印y的值后,将 第一个i值,也就是[4,5,6,0] 删除了第一位数,打印newy的值:[5,6,0];

接着继续运行,就从刚刚遇到yield之后开始运行,打印x的值,为生成器的第一个值,也就是[5,6,0],接着将第一个值继续投入循环,碰到yield,返回生成器内的第二个值,程序停止,继续运行runtestA,打印y 的值,为[5,6,0,1],接着继续删除列表第一个值,返回newy=[6,0,1],不断循环,直到生成器内循环结束

(3)

def testA(a):
    b = [1,2,3]
    print("调用开始")
    for m in range(0,len(b)):
        print("---start---")
        a.append(m)
        yield a
        a = [4,5,6]
        print("x:",a)

def runtestA():
    a=[4,5,6]
    g = testA(a)
    print("调用后")
    for i in g:
        print("y:",i)
        i.pop(0)
        print("newy:",i)

运行结果:

yield用法理解,配有代码块和解析

 文章来源地址https://www.toymoban.com/news/detail-422820.html

到了这里,关于yield用法理解,配有代码块和解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一段代码理解Python异步函数async的基本用法

    异步函数的使用规则 正常情况下我们的函数时串行的运行的,这里称之为主函数. 异步函数:与主函数并行运行. Python异步函数即async必须在普通函数的命名前加上 async 示例: 执行async函数 async函数内等待:只阻塞当前async函数 m_mock安装 通过上述代码示例可以发现case_a和case_b通过

    2024年02月15日
    浏览(51)
  • Java|static关键字的应用【工具类、代码块和单例】

    在上一篇文章讲完了static的一些基础知识后,我们就来说一说这个在应用开发中具体可以怎么使用吧,希望看完这篇文章可以对您有帮助📖 类中都是一些 静态方法 ,每个方法都是以完成一个公用的功能为目的,这个类用来给系统开发人员 共同使用的 一是调用

    2023年04月12日
    浏览(35)
  • async和await用法理解和快速上手 , 同步任务和异步任务顺序安排和轻松理解 , js代码执行顺序表面知道

    学习关键语句 : async , await 用法 await 怎么使用 同步任务和异步任务 微任务和宏任务 js中代码执行顺序 虽然说 async 和 await 是 Promise 的语法糖 , 但是用惯了Promise 的人(我) , 还真不能超快速使用上这个语法糖 , 所以赶紧写一篇文章出来让各位了解了解这个到底怎么用在我的项目

    2024年02月03日
    浏览(47)
  • 机器学习|Softmax 回归的数学理解及代码解析

    Softmax 回归是一种常用的多类别分类算法,适用于将输入向量映射到多个类别的概率分布。在本文中,我们将深入探讨 Softmax 回归的数学原理,并提供 Python 示例代码帮助读者更好地理解和实现该算法。 Softmax 函数将输入向量的线性得分转换为每个类别的概率。给定一个输入向

    2024年02月12日
    浏览(31)
  • 【音视频 | wav】wav音频文件格式详解——包含RIFF规范、完整的各个块解析、PCM转wav代码

    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍wav音频格式🍭 😎金句分享😎:🍭子曰:父母在,不远游,游必有方。 ——《论语·里仁篇》。意思是,父母还健在时,就不要

    2024年02月06日
    浏览(56)
  • 深入理解Python装饰器:解析高阶函数与代码美学

    当谈到Python编程中的高级特性时,装饰器(decorators)是一个不可忽视的重要概念。装饰器为我们提供了一种优雅的方式来修改或扩展函数的行为,而无需修改其原始代码。在本文中,我们将深入探讨Python装饰器的概念、用法以及实际示例。 在Python中,装饰器是一种特殊类型

    2024年02月12日
    浏览(56)
  • JS数组函数 reduce() 的用法—包含基础、进阶、高阶用法

    目录 一、语法剖析 二、实例讲解 1. 求数组项之和 2. 求数组项最大值 3. 数组去重 三、其他相关方法 1. reduceRight() 2. forEach()、map()、every()、some()和filter() 四、重点总结 先看w3c语法 ✔ 常见用法 数组求和 数组最大值 ✔ 进阶用法 数组对象中的用法  求字符串中字母出现的次数

    2024年01月20日
    浏览(48)
  • 【C++ Boost】一个最基本的异步boost async tcp 服务/客户端代码的深刻解析,一文解决所有接口的用法以及一些容易出错的点

    1.官网链接 https://www.boost.org/doc/libs/1_80_0/doc/html/boost_asio.html 本文代码是以官方实例代码做的一些优化 2.平台选择      Boost 最令人惊艳的地方有两个:一是支持跨平台,即windows和linux下的接口代码都是一样的;二是支持异步操作,即可以让read和write操作不阻塞。      因此

    2024年02月06日
    浏览(58)
  • PostgreSQL中case when与position包含用法

    对于复杂的业务场景,代码与SQL都可以去实现一个场景。如果用代码去实现看起来代码会冗余,不高效,不如sql的效率与简洁。 pgsql与mysql中case when用法几乎一致。在SQL中,“Case When”语句用于选择判断,在执行时先对条件进行判断,然后根据判断结果做出相应的操作;语法

    2024年02月05日
    浏览(63)
  • 论文阅读—2023.7.13:遥感图像语义分割空间全局上下文信息网络(主要为unet网络以及改unet)附加个人理解与代码解析

    前期看的文章大部分都是深度学习原理含量多一点,一直在纠结怎么改模型,论文看的很吃力,看一篇忘一篇,总感觉摸不到方向。想到自己是遥感专业,所以还是回归遥感影像去谈深度学习,回归问题,再想着用什么方法解决问题。 1、易丢失空间信息 在 Decoder 阶段输出多

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包