Python3,懒打印
Python3, a lazy print
对于我在 Python3 的最后一个项目,我使用自定义 lazy 生成器来生成我的数据。然后使用池中的 imap(多处理)。
所以在这一点上,还没有进行任何计算。
下一步是将计算后的数据输出到文件中。
为此,我要么 print(list(data))
要么 print(*data)
导致整个数据的计算(现在大约 1.5Gib,位会快速增长),要么做一个 for
循环并打印每个一段数据,它进行了大量的打印调用(现在大约有 10e6 次调用,但会快速增长)。
那么,有没有办法让 print
迭代惰性生成器?
谢谢。
使用 itertools 文档中的这个方法:
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
您可以自己批量调用 print
:
for batch in grouper(data, 1000, ''):
print('\n'.join(batch))
对于我在 Python3 的最后一个项目,我使用自定义 lazy 生成器来生成我的数据。然后使用池中的 imap(多处理)。
所以在这一点上,还没有进行任何计算。
下一步是将计算后的数据输出到文件中。
为此,我要么 print(list(data))
要么 print(*data)
导致整个数据的计算(现在大约 1.5Gib,位会快速增长),要么做一个 for
循环并打印每个一段数据,它进行了大量的打印调用(现在大约有 10e6 次调用,但会快速增长)。
那么,有没有办法让 print
迭代惰性生成器?
谢谢。
使用 itertools 文档中的这个方法:
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
您可以自己批量调用 print
:
for batch in grouper(data, 1000, ''):
print('\n'.join(batch))