问候。要分析Python代码的性能,下面的代码可以吗?
import time
to = time.clock(); x = [];
for i in range(0,4):
x.append(i*0.1);
tend = time.clock(); print(tend-to);
to = time.clock();
y = list(map(lambda x: x*0.1, list(range(0,4))));
tend = time.clock(); print(tend-to);
计时器显示不一致。但有时,两个计时器的结果也显示出不一致(有时第一个计时器更快,有时第二个计时器更快,尽管第一个计时器往往更快)。一些输出:
4.631622925399206e-05
4.4898385501326854e-05
4.9624531343562917e-05
6.852911471254275e-05
5.0569760512011734e-05
4.867930217511418e-05
3.78091667379527e-05
2.5993802132341648e-05
我的问题与上面的代码有关:
先谢谢了。问候,阿里夫
将代码包装在函数中并使用函数装饰器(例如
@function_timer()
)不是更优雅吗?例如:
from timer import function_timer
@function_timer()
def my_function():
x = [];
for i in range(0,4):
x.append(i * 0.1);
my_function()
终端输出有点像这样:
Elapsed time: 7.79 microseconds for thread MY_FUNCTION
PS:完全公开,我是Timer for Python的作者,这是一个轻量级包,可以轻松测量代码的时间和性能。
来自官方文档:
>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
0.3018611848820001
>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)
0.2727368790656328
>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)
0.23702679807320237
换句话说:如果我们努力谈论执行时间测量的精度 - 我们限制迭代一个简单的函数数千次以引发所有副作用。