$ bin/python -mtimeit -n10000000 -s 'n = 1.345' 'int(n)'
10000000 loops, best of 3: 0.234 usec per loop
$ bin/python -mtimeit -n10000000 -s 'n = 1.345' 'n // 1'
10000000 loops, best of 3: 0.218 usec per loop
$ bin/python -mtimeit -n10000000 -s 'n = 1.345' 'int(n)'
10000000 loops, best of 3: 0.233 usec per loop
$ bin/python -mtimeit -n10000000 -s 'n = 1.345; int_=int' 'int_(n)'
10000000 loops, best of 3: 0.195 usec per loop
$ bin/python -mtimeit -n10000000 -s 'n = 1.345' 'n // 1'
10000000 loops, best of 3: 0.225 usec per loop
实际上,
int
似乎比除法快。慢的部分是在全局范围内查找函数。在如果我们避免的话,这里是我的数字:
用
timeit
测试它:所以楼层划分只是一个很小的差距。注意,这些值是非常接近的,我不得不增加循环重复计数,以消除对我的机器的随机影响。即使有这么高的计数,你也需要重复几次实验,看看这些数字仍然有多大的变化,在大多数情况下什么样的结果更快。在
这是合乎逻辑的,因为
^{pr2}$int()
需要全局查找和函数调用(因此状态被推送和弹出):是}操作码比}操作码慢;
LOAD_GLOBAL
和{LOAD_CONST
和{LOAD_CONST
是一个简单的数组查找,LOAD_GLOBAL
需要执行字典查找。在将
int()
绑定到一个本地名称可能会产生一个小的差别,使它再次获得边缘(因为它所做的工作比// 1
floor division要少):同样,你需要用1000万个循环来运行它,以一致地看到差异。在
也就是说,
int(n)
更显式,除非您在时间关键的循环中这样做,int(n)
在可读性方面胜过n // 1
。时间上的差异太小了,不足以让我们去弄清楚什么是值得的。在虽然Martijn Pieters回答了您关于什么更快以及如何测试它的问题,但我觉得对于这样一个小规模的操作来说,速度并不是那么重要。正如Inbar Rose所说,我将使用int()来提高可读性。一般来说,在处理一些事情时,这种小小的可读性要重要得多;不过,一个普通的等式可能是例外。在
相关问题 更多 >
编程相关推荐