是的。标准库中的timeit模块就是如何检查这些东西的。E、 克:AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x & 1' 'isodd(9)'
1000000 loops, best of 3: 0.446 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x & 1' 'isodd(10)'
1000000 loops, best of 3: 0.443 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x % 2' 'isodd(10)'
1000000 loops, best of 3: 0.453 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x % 2' 'isodd(9)'
1000000 loops, best of 3: 0.461 usec per loop
如您所见,在我的(第一天==old==slow;-)MacBookAir上,&解决方案的重复速度比%解决方案快7到18纳秒。
timeit不仅告诉你什么是更快的,还告诉你多少(只运行几次测试),这通常表明它是多么的不重要(当调用函数的开销在400左右时,你真的关心10纳秒的差异吗?!-)...
让程序员相信微观优化本质上是无关紧要的,这已经证明是一项不可能完成的任务——尽管已经过去了35年(在这35年中,计算机的速度提高了几个数量级!)自从KnuthwroteWe should forget about small
efficiencies, say about 97% of the
time: premature optimization is the
root of all evil.
正如他所解释的,这是引用了霍尔的一个更古老的声明。我想每个人都完全相信他们的案子只剩下3%!
因此,我们(特别是蒂姆·彼得斯,在这里应该得到荣誉)没有无休止地重复“没关系”,而是放进了标准的Python库模块timeit,这使得测量这样的微基准变得非常容易,因此至少让一些程序员说服自己,嗯,这个病例确实属于97%的人群!-)