Skip to content

Commit

Permalink
修改为更准确的描述
Browse files Browse the repository at this point in the history
itertools.chain(*files)导致gen_opener()生成器被提前全部消费掉,因此在此场景不适合,参见原文https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch04s13.html。但仍可以用yield from itertools.chain.from_iterable(files),itertools.chain.from_iterable相对于itertools.chain,它是懒消费的。
见https://stackoverflow.com/questions/15004772/what-is-the-difference-between-chain-and-chain-from-iterable-in-itertools。
  • Loading branch information
jeremyxu2010 authored Oct 4, 2017
1 parent f53ef07 commit 34be2ea
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion source/c04/p13_create_data_processing_pipelines.rst
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 131,7 @@
这个函数的目的是将输入序列拼接成一个很长的行序列。
``itertools.chain()`` 函数同样有类似的功能,但是它需要将所有可迭代对象最为参数传入。
在上面这个例子中,你可能会写类似这样的语句 ``lines = itertools.chain(*files)`` ,
使得 ``gen_opener()`` 生成器能被全部消费掉
这将导致 ``gen_opener()`` 生成器被提前全部消费掉
但由于 ``gen_opener()`` 生成器每次生成一个打开过的文件,
等到下一个迭代步骤时文件就关闭了,因此 ``chain()`` 在这里不能这样使用。
上面的方案可以避免这种情况。
Expand Down

0 comments on commit 34be2ea

Please sign in to comment.