在一些代碼,我最近寫了,我有這樣的模式:如何緩存部分crc32校驗和,所以我不需要多次計算它?
from zlib import crc32
new_data = get_some_input()
crc32List['stream1'] = crc32(new_data, crc32List['stream1']) & 0xffffffffL
crc32List['stream2'] = crc32(new_data, crc32List['stream2']) & 0xffffffffL
...
crc32List['streamN'] = crc32(new_data, crc32List['streamN']) & 0xffffffffL
在我看來,那有一點冗餘計算的對那裏發生的,如果我能找到一個名爲magic(x, y)
功能,做以下緩存,我會很高興:
crc32List['cached'] = crc32(new_data, 0) & 0xffffffffL
crc32List['stream1'] = magic(crc32List['cached'], crc32List['stream1'])
crc32List['stream2'] = magic(crc32List['cached'], crc32List['stream2'])
...
crc32List['streamN'] = magic(crc32List['cached'], crc32List['streamN'])
'magic(x, y)
' 使用緩存的 'X' CRC32值,並返回相同的結果爲 'crc32(new_data, y) & 0xffffffffL
'
當然「stream[0:N]
'開始於不同的值,並在任何時間點以不同的值結束,但對於所有N,crc32計算幾乎總是執行(90%+),並始終以'new_data
'