2014-02-09 48 views
1

我有3個功能做同樣的事情,但有不同的實現,我想檢查它們中更快。測試其功能是更快

我知道有一個計時器庫,但我擔心的是,如果他們中的一個是線性的,另一種是指數我必須做出不同的輸入的一些測試來找到答案。例如,如果輸入是一個列表,對於長度爲20的列表,功能A可能會更快,但是對於長度爲1000的列表,功能A可能會更快。因此,我想知道是否有任何方法可以自動執行此操作。我可以創建一個腳本來做到這一點,也許與在輸入長度的基礎的時候了幾個地塊,但我不想再發明輪子,如果能爲我做這個庫。

+0

也許告訴我們您所使用的編程語言? – robnick

+0

對不起,我的水晶球被打破 - 你能至少提的編程語言? –

+0

可能我需要一杯咖啡。我以爲我在標籤上添加了它。我使用Python。 – Sfinos

回答

1

使用timeit

import timeit 

example = 'map(lambda x: x + 1, range(100000)' 
t = timeit.Timer(example) 
t.timeit() 

如果你想要的東西更多的其他功能,this question可能是相關的。

+0

謝謝。這是可行的! – Sfinos

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