測量小型 Python 程式碼片段的執行時間 (timeit)
Python 標準庫中的 `timeit` 模組中的 `Timer` 類和其他便捷函式旨在提供一種機制來測量執行少量 Python 程式碼所需的時間。該模組具有命令列介面,並且這些函式也可以在程式內部呼叫。
測量執行時間最簡單的方法是使用以下便捷函式:
timeit()
此函式返回 `Timer` 類的物件。它主要需要兩個引數。
stmt − 包含有效 Python 語句的字串,用於測量其執行時間。
setup − 包含 Python 語句的字串,該語句將執行一次,主要用於初始化某些物件或變數。
這兩個字串都可以包含用分號 (;) 或換行符分隔的多個語句,並且兩者都預設為 `pass` 關鍵字。還可以提供另一個可選引數 `number`,它表示“stmt”的執行次數。
在下面的示例中,測量了在 0-100 範圍內對數字進行累加和一千次所需的時間。
import timeit setupcode = "s = 0" function = ''' for x in range(100): s = s + x ''' print (timeit.timeit(setup = setupcode, stmt = function, number = 1000))
這裡一個字串包含一個 for 迴圈,在迴圈中將 0-100 範圍內的數字相加。這個字串是 `stmt` 引數。對於加法,變數的初始化由 `setupcode` 字串完成。`timeit()` 函式計算所需時間(以秒為單位)。
輸出
0.03055878530880241
Timer 類
可以透過首先建立一個 `Timer` 物件,然後在其上執行 `timeit()` 方法來獲得相同的結果。
repeat()
`Timer` 類還有一個 `repeat()` 方法,可以重複呼叫 `timeit()`。它返回所有呼叫的列表。
上面程式碼的面向物件版本如下:
import timeit setupcode = "s = 0" function = ''' for x in range(100): s = s + x ''' t = timeit.Timer(setup = setupcode, stmt = function) print (t.timeit(number = 1000)) print ('calling repeat() :',t.repeat(3,1000))
輸出
0.019971274194651528 calling repeat() : [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]
命令列介面
如前所述,`timeit` 模組具有命令列介面。該模組本身使用 `-m` 選項在命令列中匯入,用於執行 Python 指令碼。以下命令列選項定義各種引數行設定和可執行程式碼、重複頻率等。
-n N, --number = N | 執行“語句”的次數 |
-r N, --repeat = N | 重複計時器的次數(預設為 3) |
-s S, --setup = S | 最初執行一次的語句(預設為 `pass`) |
-v, --verbose | 列印原始計時結果;重複以獲得更高的精度。 |
-h, --help | 列印簡短的使用說明並退出 |
以下是前面使用的示例程式碼的命令列等效項:
C:\Users\acer>python -m timeit -s "s = 0" "for x in range(100): s = s + x" 10000 loops, best of 3: 22.4 usec per loop
廣告