測量小型 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

更新於:2020年6月27日

194 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告