Python3,一个懒惰的打印

时间:2016-05-20 19:44:02

标签: python python-3.x printing lazy-evaluation lazy-sequences

对于我在Python3中的最后一个项目,我使用自定义 lazy 生成器来生成我的数据。然后使用池中的 imap (多处理)。 所以在这一点上,没有进行任何计算。 下一步是在文件上输出计算数据。 为此,我print(list(data))print(*data)导致整个数据的计算(现在大约1.5Gib,位将快速增长),要么执行for循环并打印每个一段数据,打印很多(现在约10e6电话,但会快速增长)。

那么,有没有办法让print迭代一个懒惰的生成器?

谢谢。

1 个答案:

答案 0 :(得分:0)

使用itertools docs中的这个食谱:

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