在一些代码,我最近写了,我有这个模式:
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]
”开始使用不同的值和在任何时间点使用不同的值结束,但几乎总是执行CRC32计算(90%+),用于所有N个并始终与“ new_data
”