在 python 3.3
中新出现的句法:yield from
。
一、简单使用
如果生成器函数需要产出另一个生成器生成的值,传统的解决方法是使用嵌套的 for
循环,下面来看例子:
传统例子:
chain
生 成 器 函 数 把 操 作 依 次 交 给 接 收 到 的 各 个 可 迭 代 对 象 处 理。
因此下面来说明 yield from
使用。
可以看出,yield from i
完全代替了内层的 for
循环。在这个示例中使用 yield from
是对 的,而且代码读起来更顺畅,不过感觉更像是语法糖。除了代替循环
之外,yield from
还 会创建通道
,把内层生成器直接与外层生成器的客户端
联系起来。把生成器当成协程
使用 时,这个通道
特别重要,不仅能为客户端代码生成值
,还能使用客户端代码提供的值
。在下面的协程讲解中,会说明为什么 yield from
不只是语法糖而已。