测试哪个功能更快

时间:2014-02-09 11:56:35

标签: python performance time

我有3个功能可以执行相同的操作但具有不同的实现,我想检查哪些功能更快。

我知道有一个计时器库,但我担心的是,如果其中一个是线性的而另一个是指数的,我必须用不同的输入进行一些测试才能找到答案。例如,如果输入是一个列表,对于长度为20的列表,函数A可能会更快,但对于长度为1000的函数B可能更快。

所以,我想知道是否有任何方法可以自动执行此操作。我可以创建一个脚本来执行此操作,并且可能会在输入长度的基础上添加一些时间,但我不想再发明轮子,如果有一个库可以为我做这个。

2 个答案:

答案 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可能是相关的。