在下面的基准测试中,我发现该函数zlib.crc32快了大约 2.5 倍binascii.crc32。为什么会这样,使用zlib模块的实现有什么缺点吗?
#!/usr/bin/python3
import timeit
print("b:", timeit.timeit("binascii.crc32(data)", setup="import binascii, zlib; data=b'X'*4096", number=100000))
print("z:", timeit.timeit("zlib.crc32(data)", setup="import binascii, zlib; data=b'X'*4096", number=100000))
Run Code Online (Sandbox Code Playgroud)
结果:
b: 1.0176826480001182
z: 0.4006126120002591
Run Code Online (Sandbox Code Playgroud)
我找到了这个讨论: https://mail.python.org/pipermail/python-3000/2008-March/012728.html,其中 Gregory P. Smith(在与 Guido 的讨论中)写道:
从 binascii 中删除会破坏需要 crc32 但又不想包含 zlib 的平台或嵌入式系统。有人关心吗?
TL;DR: binascii 实现适用于没有 zlib (或不想包含它)的系统,因此它被认为是次优的,但如果删除它会破坏一切。