我有3个功能可以执行相同的操作但具有不同的实现,我想检查哪些功能更快。
我知道有一个计时器库,但我担心的是,如果其中一个是线性的而另一个是指数的,我必须用不同的输入进行一些测试才能找到答案。例如,如果输入是一个列表,对于长度为20的列表,函数A可能会更快,但对于长度为1000的函数B可能更快。
所以,我想知道是否有任何方法可以自动执行此操作。我可以创建一个脚本来执行此操作,并且可能会在输入长度的基础上添加一些时间,但我不想再发明轮子,如果有一个库可以为我做这个。
答案 0 :(得分:1)
如果功能很简单,你可以这样做(使用timeit模块):
>>> import timeit
>>> a = ('A()', 'def A():\n x = [i for i in range({list_length})]\n x * 3')
>>> b = ('B()', 'def B():\n x = []\n for i in range({list_length}) * 3:\n x.append(i)')
>>> c = ('C()', 'def C():\n x = []\n for i in range({list_length}):\n x.append(i)\n x * 3')
>>> for num in (100, 1000, 10000):
for func in (a, b, c):
print func[0], '=>', num,
timeit.timeit(func[0], setup=func[1].format(list_length=num), number=10000)
结果:
A() => 100
0.06415607679355162
B() => 100
0.29436154161112427
C() => 100
0.11945218201799435
A() => 1000
0.4792028142351228
B() => 1000
2.701182674568372
C() => 1000
1.0364000362492334
A() => 10000
4.432893686294392
B() => 10000
26.445674297814094
C() => 10000
10.198394832984377
如果功能更复杂,我建议使用Python Profiler。
答案 1 :(得分:1)
使用timeit
:
import timeit
example = 'map(lambda x: x + 1, range(100000)'
t = timeit.Timer(example)
t.timeit()
如果你想要更有特色的东西,this question可能是相关的。