4.14 展开嵌套的序列

    可以写一个包含 语句的递归生成器来轻松解决这个问题。比如:

    在上面代码中, isinstance(x, Iterable) 检查某个元素是否是可迭代的。如果是的话, yield from 就会返回所有子例程的值。最终返回结果就是一个没有嵌套的简单序列了。

    语句 yield from 在你想在生成器中调用其他生成器作为子例程的时候非常有用。如果你不使用它的话,那么就必须写额外的 循环了。比如:

    尽管只改了一点点,但是 yield from 语句看上去感觉更好,并且也使得代码更简洁清爽。

    最后要注意的一点是, 在涉及到基于协程和生成器的并发编程中扮演着更加重要的角色。可以参考12.12小节查看另外一个例子。

    原文: