什么更快? “5 % 2 == 0”或 "not 5 % 2"

What is faster? "5 % 2 == 0" or "not 5 % 2"

我尝试使用 timeit 和 time.clock() 但我的计算机速度不一致,我找不到哪个更快,如果这个问题已经存在,那么我很抱歉,但我找不到它。

测试%2(即奇数/偶数)可以通过检查数字的最低有效位来快速执行。 (使用逻辑与:(n & 1))。你很难击败它。

但是任何潜在的性能提升都可能在 Python 中减弱,因此,如果仅根据您的判断,性能提升超过表达式的混淆效果,那么对其进行分析并使用,尽管在 C 和C++,与您合作的人可能不熟悉。

我相信第二个版本 (not 5 % 2) 更快,因为 unary_not 操作比比较操作快。

最简单的方法是实际计时,使用 python 2.7 not 5 % 2 始终稍快一些:

In [1]: timeit 5 % 2== 0
10000000 loops, best of 3: 25.6 ns per loop

In [2]: timeit not 5 % 2
10000000 loops, best of 3: 24.5 ns per loop

使用按位与:

In [7]: timeit not 5 & 1
100000000 loops, best of 3: 19 ns per loop

In [8]: timeit 5 & 1 == 0
10000000 loops, best of 3: 30.1 ns per loop