2016-05-20 93 views
0

爲我在Python3的最後一個項目,我用一個自定義懶惰生成器來生成我的數據。然後使用Pool(多處理)中的imap。 所以在這一點上,沒有任何計算。 下一步是在文件上輸出計算的數據。 爲此,我要麼print(list(data))要麼是print(*data),這會導致計算整個數據(現在大約1.5Gib,位將快速增長),要麼執行for循環並打印每個數據片段,這些數據需要大量的調用打印(現在約10e6電話,但會快速增長)。Python3,一個懶惰的打印

那麼,有沒有辦法讓print遍歷一個懶惰的生成器?

謝謝。

+1

只需要調用'print'在一個循環。我相信函數調用的開銷將是您最擔心的問題。 – Zulan

+1

如果'g'是一個生成器,那麼'g:print(item)'*中的item的代碼就是*代碼,它通過一個惰性生成器迭代'print'。 –

+0

這是主要的領導,但我不覺得它_nice_。因此,如果沖洗=假,這可能是最有效的解決方案。 – Paul

回答

0

運用迭代工具文檔這個食譜:

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

這很優雅。 – Paul