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

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传递出来进行组合,以实现更加复杂的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值