python 中yield的理解

关于python中的yield、yield from、async/await中的区别与联系,下面这篇文章写的不错
https://www.jianshu.com/p/dcc583219917

我之前也有类似的困惑

>yield到底真实用途是什么
 await 到底干嘛用的和yield的区别是什么
yield 和yield from 的区别是什么

yield 理解

理解1:

我最开始是学的就是汇编和c的,所以认为 yield 的本质就是一种高级的中断, 中断就是为把线程句柄交回给 所在线程,

理解2:

想象 外层函数中调用内层函数(生成器函数)
外层函数中的 send ()和 next () 让生成器 从当前代码处 执行到下一个中断处 (yield 位置)或结尾
并返回中断 结果(也就是yield 后的 内容) 或迭代器 给 外层函数的当前调用方法 send() next()

理解3:

yield 所在的函数 自动变为生成器类 ,yield 等效于 return,
又不同与return 因为 return 只能执行一次
而yield 可以执行多次, 再次进入程序时, 从 上一次中断位置继续执行

理解4:

当生成器函数中含有return时,return不会返回任何值,会直接终止当前生成器,后续的代码 包括yield都不再有效
当函数执行到return时候,调用next()来执行生成器则会报错,如果使用for循环遍历,for循环会自动捕获该异常,直接停止遍历 抛出 StopIteration:

理解5 :
yield from

如果内函数 中 使用 多次 yield
除了 send() next() 一步一步 遍历中断,
还可 用yield from 接收生成器的迭代器句柄的 ,然后通过 迭代器 遍历所有中断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值