流畅的Python阅读笔记(一)——yield关键字

本文介绍了Python中yield关键字的基本用法及如何使用yieldfrom实现更复杂的协程功能。通过实例展示了协程的状态变化,包括创建、运行、暂停和关闭等状态。
部署运行你感兴趣的模型镜像

yield关键字

yield关键字是python中用于处理协程的关键字,其含义为产出和让步。yield item这行代码会产出一个值,提供给next(…)的调用方,同时,还会做出让步,暂停执行生成器,让调用方继续工作,指导需要使用另一个值时再调用next()。

简单的使用

def simple_coroutine():
    print('-> coroutine started')
    x = yield
    print('->coroutine recieved:', x)

上述函数是yield关键字的一个最为简单的使用,该函数调用方式如下:

> my_coro = simple_coroutine()
> next(my_coro)
-> coroutine started
> my_coro.send(42)
-> coroutine recieved: 42
Traceback(most recent call last):
  ...
StopIteration

最后一行抛出StopIteration异常是因为控制权流到了协程定义体的结尾,生成器会抛出该异常,利用该异常可以得知协程运行结束。

协程状态

协程运行时会经历以下四个状态:
‘GEN_CREATED’
‘GEN_RUNNING’
‘GEN_SUSPENDED’
‘GEN_CLOSED’
分别对应着,等待开始执行、解释器正在执行、在yield吧表达式处暂停、执行结束四个状态。next方法在协程等待开始执行时调用,使协程进入执行状态,send方法只能在协程暂停时地调用,其传入的参数将会赋值给yield等号前的变量,yield后的变量的值将会作为send的返回值返回。
使用协程可以实现一些需要异步处理的代码功能。

yield from关键字

yield from是一种全新的语言结构,其功能比yield关键字强大的多。它的主要作用是,在生成器gen中使用yield from subgen()时,subgen会获得控制权,把产出的值传给gen的调用方,即调用方可以直接控制subgen。与此同时,gen会阻塞,等待subgen终止。yield from关键字在这里起到的作用相当于是中间人的作用,将其他函数的yield传递出来进行组合,以实现更加复杂的功能。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值