如何在 Python 下快速 xor

不才接触 Python 不久,对它的脾气秉性还不太了解,只是最近听小兄弟报告说他在做性能分析时发现对一个数据块进行 xor 运算的时间竟然比将之解压出来的时间还长,感觉有点违背之前的认识。

到网络上找了找资料,找到了这个帖子:http://stackoverflow.com/questions/2119761/simple-python-challenge-fastest-bitwise-xor-on-data-buffers,还有另一个:http://stackoverflow.com/questions/5734691/fastest-bitwise-xor-between-two-multibyte-binary-data-variables。当要追求极致的时候,有的解决方案就脱离了 Python 语言自己的能力,而转向了其扩展性。

后一个帖子的楼主,其张贴出来的样例代码,其实现与我看到的非常相似。虽然对 Python 不是很熟悉,但其核心的那行语句动用了字符串的 + 操作符,本能地,我觉得在动态语言里使用这样的操作应该是比较费时间的。我的改进思路是,如果可就地计算,那么效率应该会有一定的提升。依据此想法,写了一个测试代码,而且幸运地发现 Python 里有 bytearray 类型,可堪此任。

一个将近 4KB 的数据,用一个数十字节的 xor 键进行运算,循环一千次,在我的 rMBP 上,现有算法 0.941995s,我改良过的算法 0.422185s,提升还是有的。

当然目前仍然是逐字节处理,个人认为如果能四字节一组那样成批处理,效率应该还有提升,但没有找到简洁的方式,一旦步骤复杂,很可能优劣势就会相互抵消掉了。

难道只能用 C 类语言扩展了吗?如果有行家,请赐教。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注