Skip to content

Commit 34be2ea

Browse files
authored
修改为更准确的描述
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。
1 parent f53ef07 commit 34be2ea

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

source/c04/p13_create_data_processing_pipelines.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
这个函数的目的是将输入序列拼接成一个很长的行序列。
132132
``itertools.chain()`` 函数同样有类似的功能,但是它需要将所有可迭代对象最为参数传入。
133133
在上面这个例子中,你可能会写类似这样的语句 ``lines = itertools.chain(*files)`` ,
134-
使得 ``gen_opener()`` 生成器能被全部消费掉
134+
这将导致 ``gen_opener()`` 生成器被提前全部消费掉
135135
但由于 ``gen_opener()`` 生成器每次生成一个打开过的文件,
136136
等到下一个迭代步骤时文件就关闭了,因此 ``chain()`` 在这里不能这样使用。
137137
上面的方案可以避免这种情况。

0 commit comments

Comments
 (0)