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))