我有3個功能做同樣的事情,但有不同的實現,我想檢查它們中更快。測試其功能是更快
我知道有一個計時器庫,但我擔心的是,如果他們中的一個是線性的,另一種是指數我必須做出不同的輸入的一些測試來找到答案。例如,如果輸入是一個列表,對於長度爲20的列表,功能A可能會更快,但是對於長度爲1000的列表,功能A可能會更快。因此,我想知道是否有任何方法可以自動執行此操作。我可以創建一個腳本來做到這一點,也許與在輸入長度的基礎的時候了幾個地塊,但我不想再發明輪子,如果能爲我做這個庫。
我有3個功能做同樣的事情,但有不同的實現,我想檢查它們中更快。測試其功能是更快
我知道有一個計時器庫,但我擔心的是,如果他們中的一個是線性的,另一種是指數我必須做出不同的輸入的一些測試來找到答案。例如,如果輸入是一個列表,對於長度爲20的列表,功能A可能會更快,但是對於長度爲1000的列表,功能A可能會更快。因此,我想知道是否有任何方法可以自動執行此操作。我可以創建一個腳本來做到這一點,也許與在輸入長度的基礎的時候了幾個地塊,但我不想再發明輪子,如果能爲我做這個庫。
使用timeit
:
import timeit
example = 'map(lambda x: x + 1, range(100000)'
t = timeit.Timer(example)
t.timeit()
如果你想要的東西更多的其他功能,this question可能是相關的。
謝謝。這是可行的! – Sfinos
如果函數是簡單的,你可以做這樣的事情(與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。
也許告訴我們您所使用的編程語言? – robnick
對不起,我的水晶球被打破 - 你能至少提的編程語言? –
可能我需要一杯咖啡。我以爲我在標籤上添加了它。我使用Python。 – Sfinos