引入始末
python3中出现的yield from对coroutine编程提供了极大的好处,那么在之前出现的yield关键字,充当一个什么样的作用呢。
原本的yield语句只能将cpu控制权还给调用者,(这里引申出一个重要的一点就是多线程编程与协程编程同样都是切换,一个是在cpu角度,一个是在用户程序角度),当你想要在一个generater或者couroutine里带有yield语句的逻辑重构到另外一个generater中的时候,会非常麻烦。因为外层的生成器要为里层的生成器做消息传递,所以就需要吧这一层消息封装起来,这样有了yield from的出现
例子说明
当我们简单的使用yield去进行嵌套generater编程的时候,那么我们的代码会非常的繁琐,那么我们一起看看
那么外层的将会是这样,当然消费者生产者模型跟这个非常像
那么如果说我们将其换成python3中yield from模式,那么我么就会得到如下的代码
我们可以发现内外层的行为非常一致,消息一层一层的传递,外层对内层的调度,yied from就封装了消息传递和调度作用