关于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 接收生成器的迭代器句柄的 ,然后通过 迭代器 遍历所有中断