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

    文章

    315

    浏览量

    21010
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84685
收藏 人收藏

    评论

    相关推荐

    通过高新技术企业复审

    2024年12月11日,广东省全国高新技术企业认定备案公示,广州万通信息技术有限公司通过2024年全国高新技术企业认定报备复审。 万通是国家级专精特新重点“小巨人”企业、是“广东省信息安全芯片
    的头像 发表于 12-13 09:53 387次阅读

    FS-MCore-F800E STM32例

    FS-MCore-F800E STM32例
    发表于 11-18 15:10 0次下载

    使用TMS320C6416处理器:Turbo处理器(TCP)

    电子发烧友网站提供《使用TMS320C6416处理器:Turbo处理器(TCP).pdf》资料免费下载
    发表于 10-23 10:16 0次下载
    使用TMS320C6416<b class='flag-5'>协</b>处理器:Turbo<b class='flag-5'>协</b>处理器(TCP)

    使用TMS320C6416处理器:Viterbi处理器(VCP)

    电子发烧友网站提供《使用TMS320C6416处理器:Viterbi处理器(VCP).pdf》资料免费下载
    发表于 10-21 09:36 0次下载
    使用TMS320C6416<b class='flag-5'>协</b>处理器:Viterbi<b class='flag-5'>协</b>处理器(VCP)

    安达发|APS高级排高级物料需求计划

    APS高级排高级物料需求计划是在制造业中非常重要的概念。它们分别涉及到生产计划和物料管理,对于提高生产效率、降低成本和满足客户需求具有重要意义。下面我将详细介绍这两个概念及其在实际生产
    的头像 发表于 09-25 17:49 314次阅读
    安达发|APS高级排<b class='flag-5'>程</b>高级物料需求计划

    基于APS排系统的PDM功能

    APS系统(AdvancedPlanningandScheduling,先进计划与排)是一种基于APS系统(AdvancedPlanningandScheduling,先进计划与排)是一种
    的头像 发表于 09-21 16:53 254次阅读
    基于APS排<b class='flag-5'>程</b>系统的PDM功能

    国内APS高级排软件的全面解析

    在现代制造业和物流行业中,高效的生产计划和库存管理是企业提升竞争力的关键。随着信息技术的发展,高级排软件(AdvancedPlanningandScheduling,APS)成为了企业优化资源配置
    的头像 发表于 09-21 16:49 403次阅读
    国内APS高级排<b class='flag-5'>程</b>软件的全面解析

    晶泰科技与鑫集团签署战略合作协议

    近日,在苏州鑫能源中心,晶泰科技与鑫集团共同见证了双方战略合作新篇章的开启,正式签署了为期五年的战略合作协议。此次合作,不仅标志着两大行业巨头的强强联合,更预示着新能源材料研发领域将迎来一场由人工智能与自动化技术引领的深刻变革。
    的头像 发表于 09-03 14:34 480次阅读

    请问ESP32s3 ULP RISC-V处理器是否支持ADC的读取?

    我在ULP RISC-V处理器的例程中,没有发现有对ADC的操作,请问RISC-V处理器目前还不支持吗?使用的IDF版本为4.4.2。 我想在ULP模式下,通过ADC来读取外部器件的数据。
    发表于 06-14 07:38

    使用C语言实现的CRC计算单元的例子

    使用C语言实现的CRC计算单元的例子
    的头像 发表于 05-16 16:16 985次阅读

    鸿蒙轻内核源码分析:MMU 处理器

    1、 ARM C15 处理器 在 ARM 嵌入式应用系统中, 很多系统控制由 ARM CP15 处理器来完成的。CP15 处理器包含编号 0-15 的 16 个 32 位的寄存器。例如,ARM
    的头像 发表于 02-20 14:28 591次阅读
    鸿蒙轻内核源码分析:MMU <b class='flag-5'>协</b>处理器

    谈谈的那些事儿

    随着异步编程的发展以及各种并发框架的普及,作为一种异步编程规范在各类语言中地位逐步提高。我们不单单会在自己的程序中使用,各类框架如fastapi,aiohttp等也都是基于异步
    的头像 发表于 01-26 11:36 1117次阅读
    谈谈<b class='flag-5'>协</b><b class='flag-5'>程</b>的那些事儿

    如何通过仿真动图理解各种传感器的原理呢?

    如何通过仿真动图理解各种传感器的原理呢?
    发表于 01-15 10:39 531次阅读
    如何<b class='flag-5'>通过</b>仿真动图<b class='flag-5'>理解</b>各种传感器的原理呢?

    安达发|基于APS排系统的PDM功能

    APS系统(Advanced Planning and Scheduling,先进计划与排)是一种基于APS系统(Advanced Planning and Scheduling,先进计划与排
    的头像 发表于 01-08 16:05 419次阅读
    安达发|基于APS排<b class='flag-5'>程</b>系统的PDM功能

    BlueNRG系列处理器实战经验简介

    BlueNRG 系列芯片从最早的一代 BlueNRG-MS 开始就支持处理器模式。
    的头像 发表于 01-05 18:16 1881次阅读
    BlueNRG系列<b class='flag-5'>协</b>处理器实战经验简介