import time
def timeit(f, n):
start = time.time()
for i in range(n):
f(n)
return time.time()-start
def f1(n):
return n % 10
def f2(n):
return str(n)[-1]
mean = lambda a: sum(a)/len(a)
>>> mean([timeit(f1, 1000000) for i in range(10)]) #average 10 runs
0.111114501953125
>>> mean([timeit(f2, 1000000) for i in range(10)]) #average 10 runs
0.29976160526275636
>>>
python -m timeit '[n%10 for n in range(100000000)]'
10 loops, best of 3: 5.82 sec per loop
python -m timeit '[str(n)[-1] for n in range(100000000)]'
10 loops, best of 3: 20.9 sec per loop
第二个大约需要3倍的时间。我还没有仔细阅读源代码,但可能是因为类型转换和切片,而第一个是一个简单的、定义良好的操作。你知道吗
你不在乎。你知道吗
在实际项目中,这种差异是完全可以忽略的,因为有太多的事情比寻找剩余物慢得多,其中有些涉及IO,有些涉及复杂的算法。你知道吗
在您的情况下,您应该只考虑代码可读性。第一种方法的可读性比第二种方法好得多。你知道吗
原件
判断哪个更快的方法是使用
timeit
。你知道吗编辑
就像注释所说的,如果你写
4658746110%10
,它将被常数折叠成0
。你知道吗在python中,我们可以使用dis模块来查看字节码。你知道吗
把
constant
数字改成i
第一个是
LOAD_CONST
,第二个是BINARY_MODULO
。所以你想要计时的代码可能是这样的:相关问题 更多 >
编程相关推荐