timeit --- 測量小量程式片段的執行時間

原始碼:Lib/timeit.py


該模組提供了一種對少量 Python 程式碼進行計時的簡單方法。它有一個命令列介面和一個可呼叫介面,它避免了許多測量執行時間的常見陷阱。另請參閱由 O'Reilly 出版的 Python 錦囊妙計 (Python Cookbook) 第二版中 Tim Peters 所寫的「演算法」章節的介紹。

基礎範例

以下範例展示了如何使用命令列介面來比較三個不同的運算式:

$ python -m timeit "'-'.join(str(n) for n in range(100))"
10000 loops, best of 5: 30.2 usec per loop
$ python -m timeit "'-'.join([str(n) for n in range(100)])"
10000 loops, best of 5: 27.5 usec per loop
$ python -m timeit "'-'.join(map(str, range(100)))"
10000 loops, best of 5: 23.2 usec per loop

這可以透過 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

也可以在 Python 介面傳遞可呼叫物件:

>>> timeit.timeit(lambda: "-".join(map(str, range(100))), number=10000)
0.19665591977536678

但請注意,僅當使用命令列介面時 timeit() 才會自動確定重複次數。在範例章節中有更進階的範例。

Python 介面

該模組定義了三個便利函式和一個公開類別:

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)

使用給定的陳述式、setup 程式碼和 timer 函式建立一個 Timer 實例,並執行其 timeit() 方法 number 次。可選的 globals 引數指定會在其中執行程式碼的命名空間。

在 3.5 版的變更: 新增 globals 選用參數。

timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=5, number=1000000, globals=None)

使用給定的陳述式、setup 程式碼和 timer 函式建立一個 Timer 實例,並使用給定的 repeat 計數和 number 來運行其 repeat() 方法。可選的 globals 引數指定會在其中執行程式碼的命名空間。

在 3.5 版的變更: 新增 globals 選用參數。

在 3.7 版的變更: repeat 的預設值從 3 更改為 5。

timeit.default_timer()

預設計時器始終為 time.perf_counter(),會回傳浮點秒數。另一種方法是 time.perf_counter_ns,會回傳整數奈秒。

在 3.3 版的變更: