0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过例子由浅入深的理解yield协程

冬至配饺子 来源:缪斯之子 作者:肖新苗 2022-08-23 11:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

题记

本系列目标是通过例子由浅入深的理解协程.

读者

需要有一定的python基础, 概念部分建议阅读经典书: 流畅的python 或者 查看w3c school 或者 菜鸟教程

基本概念

生成器:只要 Python 函数的定义体中有 yield 关键字,该函数就是生成器函数,调用生成器函数返回的是生成器对象

yield关键字:总的来说就是:产出和让步,产出结果,让出控制权

send:send() 方法致使协程前进到下一个yield 语句,另外,生成器可以作为协程使用

例子说明

yield的执行流程, 并制作了一个生成器调用的共同方法print_value

def yield1():
'''
整体解释:1将作为第一个send方法的返回值,b是第二个send方法的参数,
最后的return是作为最后一个send方法的返回值
'''
# 4.yield1()协程:阻塞在此,执行yield产出结果为1,把控制权给主线程
# 9.yield1()协程:阻塞解除,获得输入值2,并赋值给b
b = yield 1
# 10.yield1()协程:返回b
return b


def yield2():
'''
协程阻塞在此,执行yield产出结果为None,并交出控制权给主线程
注: 因为yield后面没有值,所以是None
'''
yield
# 如果没有返回值,会return None
pass


def yield3():
yield 1


def print_value(f, args):

try:
# 3.print_value方法:对yield1()协程执行send
# 5.print_value方法:接收yield1()协程的返回值1,并赋值给b
# 8.print_value方法:对yield1()协程再次执行send,并传入2
b = f.send(args)
except StopIteration as e:
'''
11.print_value方法:接收yield1()协程的返回值,
如果是最后一个迭代,就会进入到这个异常捕获
'''

print(f'{f.__name__}返回值 {e.value}')
return e.value
else:
# 6.print_value方法:打印b
print(f'{f.__name__}接收 {b}')

'''

1.主线程:`yield1`是生成器函数,`yield1()`调用生成器函数,

返回生成器对象也可以称作协程
'''
ys = [yield1(), yield2(), yield3()]
for y in ys:
# 2.主线程:y是yield1()生成器对象,第一次发送None
# 12.主线程:y是yield2()生成器对象,第一次发送None.
# 注:yield2 yield3根yield1差不多所以12步以后的都略过了
print_value(y, None)
# 7.主线程:第二次send参数为2
print_value(y, 2)


结果:
yield1接收 1
yield1返回值 2
yield2接收 None
yield2返回值 None
yield3接收 1
yield3返回值 None


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    322

    浏览量

    22803
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90314
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    解析Linux的进程、线程和协

    )轻量级:相对于进程,线程的创建和切换开销较小。 (3)同步与通信:线程之间需要通过同步机制(如互斥锁、信号量)来保证数据的一致性。 (Coroutine)
    发表于 12-22 11:00

    FreeRTOS任务和协的区别是什么

    定义 例程实现是通过一组宏提供的。 4. 条件限制 RAM使用量的减少是以在如何构建方面的一些严格限制为代价的。
    发表于 12-08 08:18

    ucos与freertos哪个好?

    选择uCOS或FreeRTOS取决于项目的具体需求和资源限制。 FreeRTOS的优点包括: 更小的内核ROM和RAM占用,特别是在RAM方面,适合资源受限的嵌入式系统。 支持
    发表于 12-05 07:13

    通过API接口使用关键词搜索酒店列表

    技术实践: 导语:在开发旅游或酒店预订相关的应用程序时,集成第三方平台的酒店数据是常见需求。携作为国内领先的在线旅游服务平台,提供了丰富的API接口供开发者使用。本文将聚焦于如何使用携提供
    的头像 发表于 11-17 14:57 1042次阅读
    <b class='flag-5'>通过</b>携<b class='flag-5'>程</b>API接口使用关键词搜索酒店列表

    通过接口获取携酒店详情数据的技术实现

     技术分享: 在开发旅游类应用时,整合酒店数据是常见需求。本文将以技术视角探讨如何通过接口获取携平台的酒店详情数据(注:实际商用需获得官方授权)。 一、接口调用基础 认证机制 通常需要申请
    的头像 发表于 11-17 14:15 547次阅读
    <b class='flag-5'>通过</b>接口获取携<b class='flag-5'>程</b>酒店详情数据的技术实现

    安达发|制药车间在“人脑”排产?APS生产排软件才是智慧解药!

    是什么? APS,即高级计划与排(Advanced Planning and Scheduling),APS生产排软件是一种基于供应链管理和约束理论的先进计划与排系统。它能够综合考虑多种因素,如设备产能、物料供应、人员安排
    的头像 发表于 11-10 11:00 714次阅读
    安达发|制药车间在“人脑”排产?APS生产排<b class='flag-5'>程</b>软件才是智慧解药!

    NICE处理器接口信号解读--以demo为例

    的复位信号。 nice_active表示nice处理器是否正在工作,但该信号在上层文件中未例化,如下图所示。 nice_mem_holdup信号在e203_lsu_ctrl.v文件中用于覆盖cpu
    发表于 10-31 08:01

    利用Verdi调试处理器的实现步骤

    的search forward工具按钮搜索nice_req_valid信号以追踪到主处理器发起的调用请求信号。 结果如下图所示。 小结 本文梳理了调试过程中的技巧,通过调试发现处理器设计不周到的地方,因为能力有限,若是理解
    发表于 10-30 08:26

    MD5信息摘要算法实现二(基于蜂鸟E203处理器)

    本设计首先根据MD5处理器的功能设计MD5算法IP核,软件部分使用串口程序助手进行64位加解密结果的输出,E203内核根据地址取出对应的数据,使用相关的指令进行传输显示。通过NICE接口将MD5
    发表于 10-30 07:54

    NICE处理器demo分析及测试

    实现思路: 1.硬件设计,编写相应的verilog文件,需要注意的是NICE处理器定义了一些基本的接口; 2.编写驱动,通过内联汇编的伪指令.insn配置相关的驱动设置; 3.编写用于测试
    发表于 10-23 07:05

    基于E203 NICE处理器扩展指令

    1、实现功能 基于官方提供的demo nice的硬件代码,设计一个基于e203 nice处理的加法器。 2NICE处理器理论学习 nice处理器的作用主要是用于控制通路的管理 去年
    发表于 10-21 14:35

    基于E203 NICE处理器扩展指令2.0

    实现功能:基于官方提供的demo nice的硬件代码,设计一个基于e203 nice处理的加法器。 NICE处理器理论学习 nice处理器的作用主要是用于控制通路的管理 去年国一的
    发表于 10-21 10:39

    广汽星源增技术即将登场

    当下,新能源汽车产业狂飙突进、增概念重燃热潮,广汽集团以技术创新为利剑,直击用户核心痛点,持续释放高质量发展新动能。8月19日,广汽将正式发布全新“星源增”技术,并上市交付昊铂HL增版,以“无亏电感”的全新体验,重塑增
    的头像 发表于 08-20 17:07 1179次阅读

    广汽星源增技术暨昊铂HL增版上市发布会定档

    近年来,增赛道火热,但不少增车一遇亏电,驾驶体验感急转直下。作为中国增技术开创者之一,广汽集团将于8月19日举办广汽星源增技术暨昊铂HL增
    的头像 发表于 08-14 16:44 1408次阅读

    请问NICE处理器与传统ocb外设相比的优势有什么?

    使用扩展指令调用NICE处理器完成预定操作,给出的优势通常为代替CPU处理数据,但其实使用片上总线挂一个外设,然后驱动外设完成操作也可以实现相同的功能,所以想问一下处理器相比于外设实现还有没有其它方面的优势
    发表于 05-29 08:21