def one():
print('one start')
res = yield from two()
print('function get res: ', res)
return 'one' + res def two():
print('two start')
res = yield from three()
print(">>> two1")
return res def three():
print(">>> three1")
yield 1
print(">>> three2")
return 'three' if __name__ == '__main__':
gen = one()
print(">>> 1")
send_1 = gen.send(None)
print(">>> 2")
print(send_1)
print(">>> 3")
send_2 = gen.send(None)
print(">>> 4")
print(send_2)
print(">>> 5")

运行结果:

>>> 1
one start
two start
>>> three1
>>> 2
1
>>> 3
>>> three2
>>> two1
function get res: three
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/1.py", line 29, in <module>
send_2 = gen.send(None)
StopIteration: onethree
>>>

不要把yield from 想的太复杂,就把yield from调用看作是普通函数调用来看代码。一旦遇到yield会返回。再次send,特点和生成器一样。

1、当send里面的函数先遇到的是yield from语句,那么会继续往下调用,直到遇到yield会暂停并返回给调用方。

main->one()->two()->three->遇到yield- >main

2、遇到yield语句,会直接返回到send语句所在函数, 也就是send_1 = gen.send(None),send_1 赋值为 three()中的 yield 1

3、再次调用send语句,就会变成1的反向调用,从yield暂停的地方 three() 函数的 yield 1下面开始执行

three()->two()->one->main

4、yield from后面的函数返回值会得到,赋值给左值

three()的返回值会给two()的res,two()的返回值会给one()

转载至 https://www.jianshu.com/p/01d8100c2b41

最简单明了的yield from解释的更多相关文章

  1. 第一次有人把5G讲的这么简单明了

    第一次有人把5G讲的这么简单明了 鲜枣课堂 纯洁的微笑 今天 关于5G通信,常见的文章都讲的晦涩难懂,不忍往下看,特转载一篇,用大白话实现5G入门. 简单说,5G就是第五代通信技术,主要特点是波长为毫 ...

  2. 简单明了区分IE,Firefox,chrome主流浏览器

    简单明了判断浏览器Firefox:typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().index ...

  3. 前端神器之Sublime Text2/3简单明了使用总结

    为什么叫神器呢? 我总结如下: 第一:也是最重要的,它占内存很小(就如同notepad++那般迅速打开,所以那款其实也不错~).一般IDE比如WebStorm(它也是一款神器来着),Aptana(也比 ...

  4. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

  5. ❤️这应该是Postman最详细的中文使用教程了❤️(新手使用,简单明了)

    ️这应该是Postman最详细的中文使用教程了️(新手使用,简单明了) 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性.而这要求前端开发进 ...

  6. python中yield的用法详解——最简单,最清晰的解释(转载)

    原文链接 首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的, ...

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

    转载自https://blog.csdn.net/mieleizhi0522 首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都 ...

  8. oracle中number类型最简单明了解释

    NUMBER (p,s) p和s范围: p 1-38 s -84-127 number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧 ...

  9. oracle中number数据类型简单明了解释

    NUMBER (p,s) p和s范围: p 1-38 s -84-127 number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧 ...

  10. 什么是TTL值?(简单明了的解释)

    什么是TTL值? TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上的缓存时间. 要理解TTL值,请先看下面的一个例子:假设,有这样一个域名myhost. ...

随机推荐

  1. DP4056软硬兼容TP4056,低成本

    概述 DP4056是一款单节锂离子电池恒流/恒压线性充电器,采用底 部带散热片的SOP8封装以及简单的外部应用电路,常适 合便携式设备应用,适合USB电源和适配器电源工作,内部采用防倒充电路,不需要外 ...

  2. 绕过登录的Cookie

    1.先通过代码把登录前后的cookie打印出来,代码如下: #登录之前打印Cookiecks = driver.get_cookie() for ck in cks: print(ck) # 睡10秒 ...

  3. firefox 利用 Selenium IDE 对 DBackup 进行自动化测试

    今天看<编写可维护的JavaScript>的时候有一章是专门讲 Selenium 对 JavaScript 进行自动化测试的. 在了解了 Selenium 的强大之后,动手试验了一下 fi ...

  4. 使用IDEA+Tomcat部署web项目记录

    使用IDEA+Tomcat部署web项目记录 本文已同步发布于CSDN JDK版本:1.8(请自行配好环境变量) IDEA版本:2019.3 Tomcat版本:9.0.39 1.新建project和m ...

  5. solve--NAT模式下配置静态IP地址

    第一步 打开虚拟机的虚拟网络编辑器:

  6. 查看process状态

    1.查看进程Uid.Gid bash-4.4# cat /proc/1/status | grep Uid Uid: 0 0 0 0 bash-4.4# cat /proc/1/status | gr ...

  7. MyBatis(Plus) 打印SQL, 分析执行时间

    MyBatis/MyBatis Plus打印的SQL调试起来比较麻烦 当然IDEA/eclipse都有类似mybatis log plugin这种插件来解析, 但是安装插件有些许弊端, 就写了个工具类 ...

  8. Modern C++ ——constexpr的各种用法

    Modern C++ --constexpr的用法 Reference <现代C++语言核心特性解析> 为什么引入constexpr const可以定义常量,但也可以用来定义只读变量.co ...

  9. windows下的故障自愈程序,可以实现进程,kafka按时间段判断状态,日志分级

    self-healing 1.使用python3.11写的一个故障自愈程序. 2.本程序在window2019 server运行测试通过 3.通过监控java程序里的详细启动包名来判断进程是否存在 4 ...

  10. 第一个WCF程序(最小实现)

    环境:Microsoft Visual Studio 2017 注意事项:右键"以管理员身份"启动VS. 目标:实现一个加法运算,并在服务器端D盘新建一个文件夹. 一.服务器端创建 ...