日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python timeit模塊原理及使用方法

瀏覽:53日期:2022-07-08 17:29:39

Python 中的 timeit 模塊可以用來測試一段代碼的執行耗時,如一個變量賦值語句的執行時間,一個函數的運行時間等。

timeit 模塊是 Python 標準庫中的模塊,無需安裝,直接導入就可以使用。導入時直接 import timeit ,可以使用 timeit() 函數和 repeat() 函數,還有 Timer 類。使用 from timeit import ... 時,只能導入 Timer 類(有全局變量 __all__ 限制)。

timeit 模塊的源碼總共只有 300 多行,主要就是實現上面的兩個函數和一個類,可以自己看一下。

接下來就開始使用 timeit 模塊來測試代碼執行時間,我使用 timeit 模塊來對比 Python 列表從頭部添加數據和從尾部添加數據的執行時間(測試什么根據需求來定)。

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

1. 準備測試函數

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

#coding = utf - 8def 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# coding = utf - 8def 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’ (__main__表示當前的文件)。可以寫一行語句,也可以寫多行語句,寫多行語句時用分號隔開。

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

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])

timeit 模塊是一個比較簡單的模塊,大概用法就這些了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区2区| 欧美在线影院| 日韩久久99| 青青草伊人久久| 国产日韩高清一区二区三区在线 | 午夜久久av| 日本午夜精品视频在线观看| 欧美日韩亚洲一区| 国产一区二区三区天码| 视频二区不卡| 水野朝阳av一区二区三区| 一区二区国产在线观看| 亚洲精品一二三**| 国产精选久久| 日韩中文欧美| 亚洲一区二区三区高清| 久久激情五月婷婷| 福利一区二区三区视频在线观看| 亚洲四虎影院| 老司机精品久久| 欧美激情视频一区二区三区在线播放| 国产精品麻豆成人av电影艾秋| 激情久久99| 樱桃成人精品视频在线播放| 日韩不卡一区二区三区 | 欧美日韩亚洲一区在线观看| 国产aⅴ精品一区二区三区久久| 久久久夜夜夜| 亚洲免费观看高清完整版在线观| 国产欧美日韩精品一区二区三区| 在线天堂资源www在线污| 亚洲欧美激情诱惑| 免费一级欧美片在线观看网站| 久久久久国产精品一区二区| 欧美日韩免费观看一区=区三区| 天堂俺去俺来也www久久婷婷| 久久99性xxx老妇胖精品| 亚洲香蕉网站| 国产精品片aa在线观看| 亚洲精品电影| 久久一区精品| 爽好多水快深点欧美视频| 精品视频99| 免费观看在线色综合| 中文在线免费视频| 国产亚洲欧美日韩精品一区二区三区 | 日韩一区欧美二区| 国产成人久久| 婷婷视频一区二区三区| 日韩一区二区三区免费| 青青国产精品| 欧美资源在线| 日韩精品中文字幕第1页| 亚久久调教视频| 欧美日韩黑人| 国产日韩一区二区三区在线| 欧美在线亚洲| 国内自拍视频一区二区三区| 亚洲欧洲日韩精品在线| 一区二区精品伦理...| 日韩精彩视频在线观看| 亚洲特色特黄| 国产精品福利在线观看播放| 日韩成人午夜精品| 亚洲一区二区三区高清不卡| 精品深夜福利视频| 亚洲专区视频| 免费一二一二在线视频| 麻豆久久一区| 日韩欧乱色一区二区三区在线| 国产精品任我爽爆在线播放| 影音先锋国产精品| 99精品视频在线观看免费播放| 老鸭窝一区二区久久精品| 亚州av日韩av| 免播放器亚洲一区| 久久一区二区三区电影| 国产suv精品一区二区四区视频 | 久久久久久网| 久久99久久久精品欧美| 亚洲三级av| 免费不卡在线视频| 亚洲一区欧美激情| 日韩中文视频| 电影亚洲精品噜噜在线观看| 成人国产精品| 中文字幕成在线观看| av中文字幕在线观看第一页| 久久精品天堂| 97精品在线| 亚洲天堂免费电影| 亚洲三级欧美| 伊人久久av| 日韩.com| 色综合www| 国产超碰精品| 人人精品亚洲| 91精品综合| av中文字幕在线观看第一页| 欧美www视频在线观看| 97精品中文字幕| 老牛影视精品| 久久久久午夜电影| 亚洲第一精品影视| 欧洲毛片在线视频免费观看| 91精品电影| 亚洲一区国产| 蜜臀久久久99精品久久久久久| 亚洲一区二区三区在线免费| 欧产日产国产精品视频| 国产成人精品亚洲日本在线观看| 精品视频在线你懂得| 中文字幕免费精品| 亚洲欧美日本视频在线观看| 蜜臀av一区二区在线免费观看 | 国产日韩免费| 国产精品国码视频| 精品99在线| 99久久久国产精品美女| 欧美精选一区二区三区| 蜜桃传媒麻豆第一区在线观看| 亚洲一级淫片| 国产日韩一区二区三免费高清 | 中文不卡在线| 欧美日韩亚洲国产精品| 久久精品国产99国产精品| 日韩大片在线| 国产视频久久| 国产欧美自拍一区| 天堂中文在线播放| 99在线观看免费视频精品观看| 久久国产精品久久久久久电车| 婷婷五月色综合香五月| 久久亚洲黄色| 在线亚洲免费| 精品一区二区三区中文字幕视频 | 欧美成人aaa| 日本综合字幕| 中文字幕av亚洲精品一部二部 | 一区二区三区午夜视频| 国产劲爆久久| 国产综合欧美| 日本成人精品| 日韩国产一区| 亚洲视频二区| 久久久久久久欧美精品| 99成人超碰| 欧美在线观看天堂一区二区三区| 国产一区二区亚洲| 亚洲我射av| 在线手机中文字幕| 一区二区精品| 成人看片网站| 日本亚洲视频| 国产伦久视频在线观看| 视频在线观看91| 国产一区二区三区黄网站| 蜜臀国产一区二区三区在线播放| 国产成人调教视频在线观看| 欧美福利一区| 久久永久免费| 久久精品高清| 国产精品久久乐| 亚洲一区二区三区四区电影| 精品久久网站| 亚洲精品大片| 国产中文一区| 久久精品三级| 日韩精品高清不卡| 欧美午夜精彩| 精品72久久久久中文字幕| 亚洲理论在线| 欧美日韩国产精品一区二区亚洲| 色爱综合网欧美| 婷婷亚洲成人| 伊人久久亚洲热| 久久久国产亚洲精品| 麻豆精品在线视频| 国产调教精品| 日韩精品免费视频人成 | 日韩不卡一区| 国产精品三p一区二区| 免费人成精品欧美精品| 人人精品亚洲| 精品国产aⅴ| 国产精品自在| 欧美精品国产| 欧美亚洲激情| 在线手机中文字幕| 国产精品白丝一区二区三区| 亚洲一二三区视频| 樱桃成人精品视频在线播放| 日韩三区在线| 日韩成人三级| 天堂8中文在线最新版在线| 国产精品蜜月aⅴ在线| 欧美精品影院| 国产毛片久久久| 国产毛片精品久久| 欧美日韩一区二区三区不卡视频 |