什么更快? “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
我尝试使用 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