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
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,會回傳整數奈秒。