亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Python中使用timeit模塊

發布時間:2021-03-18 16:31:04 來源:億速云 閱讀:197 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何在Python中使用timeit模塊,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、使用 timeit() 函數測試運行時間

1. 準備測試函數

先寫兩個函數,一個函數是從列表頭部添加數據,另一個函數是從列表尾部添加數據。

# coding=utf-8
def insert_time_test():
  insert_list = list()
  for i in range(10):
    insert_list.insert(0, i)
def append_time_test():
  append_list = list()
  for i in range(10):
    append_list.append(i)
if __name__ == '__main__':
  import timeit

2. timeit(stmt="pass", setup="pass", timer=default_timer, number=default_number) 函數介紹

timeit() 函數有四個參數,每個參數都是關鍵字參數,都有默認值。

stmt:傳入需要測試時間的代碼,可以直接傳入代碼表達式或單個變量,也可以傳入函數。傳入函數時要在函數名后面加上小括號,讓函數執行,如 stmt = ‘func()'  。

setup:傳入 stmt 的運行環境,如 stmt 中使用到的參數、變量,要導入的模塊等,如 setup = ‘from __main__ import func'。可以寫一行語句,也可以寫多行語句,寫多行語句時用分號隔開。

如果 stmt 和參數 setup 參數不傳值,那么就失去了測試的意義,所以這兩個參數是必要的。

timer: timer 參數是當前操作系統的基本時間單位,默認會根據當前運行環境的操作系統自動獲取(源碼中已經定義),保持默認即可。

number:要測試的代碼的運行次數,默認1000000(一百萬)次,對于耗時的代碼,運行太多次會花很多時間,可以自己修改運行次數。

3. 測試函數的運行時間

現在使用 timeit() 來測試上面兩個函數的運行時間。

  insert_time_timeit = timeit.timeit(stmt='insert_time_test()', 
                    setup='from __main__ import insert_time_test')
  print('insert_time_timeit: ', insert_time_timeit)
  append_time_timeit = timeit.timeit(stmt='append_time_test()', 
                    setup='from __main__ import append_time_test')
  print('append_time_timeit: ', append_time_timeit)

運行結果:

('insert_time_timeit: ', 2.9112871)
('append_time_timeit: ', 1.8884124999999998)

可以看到,在列表頭部添加數據的時間比在列表尾部添加數據的時間長。

4. 測試代碼(表達式)的運行時間

繼續使用 timeit() 測試上面代碼的運行時間,只是這次是直接將代碼傳入到參數中,而不是傳入函數。

  insert_time_timeit = timeit.timeit(stmt='list(insert_list.insert(0, i) for i in init_list)',
                    setup='insert_list=list();init_list=range(10)',
                    number=100000)
  print('insert_time_timeit: ', insert_time_timeit)
  append_time_timeit = timeit.timeit(stmt='list(append_list.append(i) for i in init_list)',
                    setup='append_list=list();init_list=range(10)',
                    number=100000)
  print('append_time_timeit: ', append_time_timeit)

由于時間很長,代碼中特意將 number 從一百萬次改成了十萬次。運行結果如下:

('insert_time_timeit: ', 330.46189400000003)
('append_time_timeit: ', 0.21436310000001413)

相對來說,對于相同的操作,使用函數的運行時間遠小于直接傳入代碼表達式的時間,頭部插入數據的尤其明顯。

二、使用 repeat() 函數測試運行時間

1. repeat(stmt="pass", setup="pass", timer=default_timer, repeat=default_repeat, number=default_number) 函數介紹

repeat() 函數有五個參數,每個參數都是關鍵字參數,都有默認值。相比 timeit() 函數而言,timeit() 函數有的參數 repeat() 函數都有,此外,repeat() 函數多了一個 repeat 參數。

repeat:表示測試要重復幾次,可以理解為將相同參數的 timeit() 函數重復執行。最終的結果構成一個列表返回,repeat 默認為3次。

2. 測試函數的運行時間

現在使用 repeat() 來測試上面兩個函數的運行時間。

 insert_time_repeat = timeit.repeat(stmt='insert_time_test()',
                    setup='from __main__ import insert_time_test')
  print('insert_time_repeat: ', insert_time_repeat)
  append_time_repeat = timeit.repeat(stmt='append_time_test()',
                    setup='from __main__ import append_time_test')

  print('append_time_repeat: ', append_time_repeat)

運行結果如下:

('insert_time_repeat: ', [2.7707739, 2.908885, 2.7164823999999994])
('append_time_repeat: ', [1.7458063, 1.777368000000001, 1.8675014999999995])

3. 測試代碼(表達式)的運行時間

繼續使用 repeat() 測試上面代碼的運行時間,直接傳入代碼,上面將 number 改成十萬次后,時間還是很長(300多秒),所以繼續減小 number ,改成一萬次。

  insert_time_repeat = timeit.repeat(stmt='list(insert_list.insert(0, i) for i in init_list)',
                    setup='insert_list=list();init_list=range(10)',
                    repeat=5,
                    number=10000)
  print('insert_time_repeat: ', insert_time_repeat)
  append_time_repeat = timeit.repeat(stmt='list(append_list.append(i) for i in init_list)',
                    setup='append_list=list();init_list=range(10)',
                    repeat=5,
                    number=10000)
  print('append_time_repeat: ', append_time_repeat)

運行結果如下:

('insert_time_repeat: ', [2.591015, 2.5814996999999997, 2.5547322, 2.6153070000000005, 2.5496864000000006])
('append_time_repeat: ', [0.0181692999999985, 0.01746889999999901, 0.018901899999999472, 0.018737400000000903, 0.018211900000000725])

三、使用 Timer 類測試運行時間

1. Timer 類介紹

上面使用了 timeit() 函數和 repeat() 函數,其實在 timeit 模塊中,這兩個函數都是對 Timer 類做了進一步的封裝,實際調用的還是 Timer 類中的方法。

在 Timer 類中,實現了兩個方法,timeit() 方法和 repeat() 方法,上面兩個函數調用的就是這兩個方法。

在使用  from timeit import ... 時,只能導入 Timer 類,所以可以直接使用 Timer 類來測試,可以自己去調用方法,使用起來更靈活。

2. 測試列表頭部添加

先實例化一個 Timer 類的對象,實例化時傳入 stmt 和 setup 參數(參數的含義與上面一致),timer 參數保持默認,然后通過實例對象調用對應的 timeit() 方法或 repeat() 方法,在 timeit() 方法中傳入 number,在repeat() 方法中傳入 number 和 repeat 。

使用 timeit() 方法和 repeat() 方法測試從頭部添加數據的運行時間。

 timer_insert = timeit.Timer(stmt='insert_time_test()', setup='from __main__ import insert_time_test')
  insert_time_timeit = timer_insert.timeit(number=1000000)
  print('insert_time_timeit: ', insert_time_timeit)
  insert_time_repeat = timer_insert.repeat(number=1000000)
  print('insert_time_repeat: ', insert_time_repeat)

運行結果如下:

('insert_time_timeit: ', 2.7732486)
('insert_time_repeat: ', [2.7367806999999997, 2.707402600000001, 2.7288245999999994])

3. 測試列表尾部添加

使用 timeit() 方法和 repeat() 方法測試從尾部添加數據的運行時間。

  timer_append = timeit.Timer(stmt='append_time_test()', setup='from __main__ import append_time_test')
  append_time_timeit = timer_append.timeit(number=1000000)
  print('append_time_timeit: ', append_time_timeit)
  append_time_repeat = timer_append.repeat(number=1000000)
  print('append_time_repeat: ', append_time_repeat)

運行結果如下:

('append_time_timeit: ', 1.9966106000000001)
('append_time_repeat: ', [1.9523343999999998, 1.8373857999999998, 1.8695377000000004])

以上就是如何在Python中使用timeit模塊,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌什县| 奉化市| 平顶山市| 博爱县| 扬州市| 镇雄县| 凤冈县| 阳新县| 长岭县| 宁国市| 卓尼县| 义乌市| 临桂县| 扎兰屯市| 潼南县| 革吉县| 丽江市| 盘山县| 五大连池市| 确山县| 涟源市| 蒙阴县| 苍山县| 鲁山县| 通化县| 海原县| 米易县| 嵊泗县| 扶余县| 新巴尔虎右旗| 宝丰县| 忻州市| 新河县| 南岸区| 栾城县| 宁明县| 定兴县| 固始县| 五家渠市| 五河县| 汝阳县|