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

您的位置:首頁技術(shù)文章
文章詳情頁

Python timeit模塊原理及使用方法

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

Python 中的 timeit 模塊可以用來測試一段代碼的執(zhí)行耗時(shí),如一個(gè)變量賦值語句的執(zhí)行時(shí)間,一個(gè)函數(shù)的運(yùn)行時(shí)間等。

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

timeit 模塊的源碼總共只有 300 多行,主要就是實(shí)現(xiàn)上面的兩個(gè)函數(shù)和一個(gè)類,可以自己看一下。

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

一、使用 timeit() 函數(shù)測試運(yùn)行時(shí)間

1. 準(zhǔn)備測試函數(shù)

先寫兩個(gè)函數(shù),一個(gè)函數(shù)是從列表頭部添加數(shù)據(jù),另一個(gè)函數(shù)是從列表尾部添加數(shù)據(jù)。

#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) 函數(shù)介紹

timeit() 函數(shù)有四個(gè)參數(shù),每個(gè)參數(shù)都是關(guān)鍵字參數(shù),都有默認(rèn)值。

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

setup:傳入 stmt 的運(yùn)行環(huán)境,如 stmt 中使用到的參數(shù)、變量,要導(dǎo)入的模塊等,如 setup = ‘from __main__ import func’ (__main__表示當(dāng)前的文件)??梢詫懸恍姓Z句,也可以寫多行語句,寫多行語句時(shí)用分號隔開。

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

timer: timer 參數(shù)是當(dāng)前操作系統(tǒng)的基本時(shí)間單位,默認(rèn)會根據(jù)當(dāng)前運(yùn)行環(huán)境的操作系統(tǒng)自動(dòng)獲取(源碼中已經(jīng)定義),保持默認(rèn)即可。

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

3. 測試函數(shù)的運(yùn)行時(shí)間

現(xiàn)在使用 timeit() 來測試上面兩個(gè)函數(shù)的運(yùn)行時(shí)間。

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)

運(yùn)行結(jié)果:

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

可以看到,在列表頭部添加數(shù)據(jù)的時(shí)間比在列表尾部添加數(shù)據(jù)的時(shí)間長。

4. 測試代碼(表達(dá)式)的運(yùn)行時(shí)間

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

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)

由于時(shí)間很長,代碼中特意將 number 從一百萬次改成了十萬次。運(yùn)行結(jié)果如下:

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

相對來說,對于相同的操作,使用函數(shù)的運(yùn)行時(shí)間遠(yuǎn)小于直接傳入代碼表達(dá)式的時(shí)間,頭部插入數(shù)據(jù)的尤其明顯。

二、使用 repeat() 函數(shù)測試運(yùn)行時(shí)間

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

repeat() 函數(shù)有五個(gè)參數(shù),每個(gè)參數(shù)都是關(guān)鍵字參數(shù),都有默認(rèn)值。相比 timeit() 函數(shù)而言,timeit() 函數(shù)有的參數(shù) repeat() 函數(shù)都有,此外,repeat() 函數(shù)多了一個(gè) repeat 參數(shù)。

repeat:表示測試要重復(fù)幾次,可以理解為將相同參數(shù)的 timeit() 函數(shù)重復(fù)執(zhí)行。最終的結(jié)果構(gòu)成一個(gè)列表返回,repeat 默認(rèn)為3次。

2. 測試函數(shù)的運(yùn)行時(shí)間

現(xiàn)在使用 repeat() 來測試上面兩個(gè)函數(shù)的運(yùn)行時(shí)間。

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)

運(yùn)行結(jié)果如下:

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

3. 測試代碼(表達(dá)式)的運(yùn)行時(shí)間

繼續(xù)使用 repeat() 測試上面代碼的運(yùn)行時(shí)間,直接傳入代碼,上面將 number 改成十萬次后,時(shí)間還是很長(300多秒),所以繼續(xù)減小 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)

運(yùn)行結(jié)果如下:

(’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 類測試運(yùn)行時(shí)間

1. Timer 類介紹

上面使用了 timeit() 函數(shù)和 repeat() 函數(shù),其實(shí)在 timeit 模塊中,這兩個(gè)函數(shù)都是對 Timer 類做了進(jìn)一步的封裝,實(shí)際調(diào)用的還是 Timer 類中的方法。

在 Timer 類中,實(shí)現(xiàn)了兩個(gè)方法,timeit() 方法和 repeat() 方法,上面兩個(gè)函數(shù)調(diào)用的就是這兩個(gè)方法。

在使用 from timeit import ... 時(shí),只能導(dǎo)入 Timer 類,所以可以直接使用 Timer 類來測試,可以自己去調(diào)用方法,使用起來更靈活。

2. 測試列表頭部添加

先實(shí)例化一個(gè) Timer 類的對象,實(shí)例化時(shí)傳入 stmt 和 setup 參數(shù)(參數(shù)的含義與上面一致),timer 參數(shù)保持默認(rèn),然后通過實(shí)例對象調(diào)用對應(yīng)的 timeit() 方法或 repeat() 方法,在 timeit() 方法中傳入 number,在repeat() 方法中傳入 number 和 repeat 。

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

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)

運(yùn)行結(jié)果如下:

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

3. 測試列表尾部添加

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

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)

運(yùn)行結(jié)果如下:

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美女黄网久久| 国产99久久| 丝袜诱惑一区二区| 美腿丝袜亚洲一区| 精品国产乱码久久久久久1区2匹| 国产色99精品9i| 国产精品毛片aⅴ一区二区三区| 日韩一区二区三区在线看| 中文字幕日韩高清在线| 亚洲欧美网站在线观看| 美女日韩在线中文字幕| 亚洲一二三区视频| 国产日韩亚洲| 国产一区二区三区久久久久久久久| 国产精品蜜月aⅴ在线| 精品五月天堂| 亚洲大片在线| 精品一区在线| 综合一区av| 日韩av一区二区三区| 国产精品videosex极品| 欧美精品97| 999国产精品999久久久久久| 99riav国产精品| 一区二区三区网站| 国产精品一区高清| 亚洲一级二级| 久久激五月天综合精品| 精品久久国产一区| 日韩欧美中文| 日韩精品一二三| 国产欧美日韩精品一区二区免费| 久久天堂成人| 亚洲精品护士| 精品99在线| 亚洲免费观看高清完整版在线观| 欧美亚洲福利| 婷婷国产精品| 婷婷激情图片久久| 美女精品一区二区| 欧美日一区二区在线观看| 午夜在线播放视频欧美| 久久精品青草| 日韩av专区| 国产精品日韩精品在线播放| 国产亚洲午夜| 欧美天堂视频| 久久福利影视| 男女激情视频一区| 亚洲一区二区成人| 成人午夜国产| 日韩在线精品| 日本美女一区| 久久电影tv| 超碰99在线| 国产精品精品| 97精品在线| 国产盗摄——sm在线视频| 免费在线观看一区| 国产精品永久| 免费看久久久| 国产一区二区三区四区大秀| 人人爱人人干婷婷丁香亚洲| 色8久久久久| 国产精品一区毛片| 麻豆久久久久久| 国产成人精品一区二区三区免费 | 国产一区日韩| 国产一区二区三区天码| 国产中文欧美日韩在线| 精品国产一区二区三区性色av| 国产精品亚洲成在人线| 精品一区二区三区中文字幕| 91免费精品| 野花国产精品入口| 在线视频精品| **爰片久久毛片| 国产一区二区精品福利地址| 亚洲va中文在线播放免费| 国产视频亚洲| 欧美激情一区| 激情欧美丁香| 欧美日韩1区| 精品日韩视频| 亚洲啊v在线免费视频| 精品久久福利| 九九久久国产| 亚洲精品视频一二三区| 国产精品久久久久77777丨| 久久久久蜜桃| 日韩av影院| 国产精品99免费看| 国产美女久久| 丝袜亚洲精品中文字幕一区| 国产精品一区二区美女视频免费看 | 欧美xxxx中国| 日韩三级久久| 日韩在线中文| 久久久久九九精品影院| 偷拍欧美精品| 国产精品99一区二区三| 在线国产日韩| 午夜国产精品视频| 国产精品美女久久久浪潮软件| 亚洲tv在线| 狠狠操综合网| 久久久男人天堂| 国产精品资源| 蜜桃免费网站一区二区三区| 亚洲综合电影| 成午夜精品一区二区三区软件| 久久亚洲国产| 久久精品国产99国产精品| 99亚洲视频| 久久精品日韩欧美| 天堂精品久久久久| 免费观看亚洲| 日本免费新一区视频| 精品国产aⅴ| 日韩精品视频中文字幕| 激情五月综合| 99国产精品一区二区| 国产一区二区三区精品在线观看| 日韩精品久久理论片| 国产日韩专区| 不卡中文字幕| 成人久久一区| 麻豆成全视频免费观看在线看| 国产精品资源| 欧美日韩精品一区二区三区在线观看| 99在线|亚洲一区二区| 久久精品一区二区不卡| 在线一区av| 国产欧美88| 国产欧美在线| 国产精品久久久久久久久久白浆 | 国产视频网站一区二区三区| 蜜桃视频一区二区| 一本综合精品| 日韩福利视频导航| 国产精品亚洲产品| 开心激情综合| 日韩欧美午夜| 欧美va天堂| 视频一区二区三区中文字幕| 亚洲免费婷婷| 免费看欧美美女黄的网站| 日韩在线观看| 日韩在线中文| 亚洲va在线| 91高清一区| 亚洲成a人片| 偷拍精品精品一区二区三区| 成人污污视频| 久久尤物视频| 国产精品日本一区二区不卡视频| 欧美一区免费| 麻豆精品新av中文字幕| 日本免费新一区视频| 久久精品99国产精品| 国产精品久久久久久久久久白浆| 久久99精品久久久久久园产越南| 亚洲精品看片| 97成人在线| 国产日韩欧美一区在线| 视频一区二区不卡| 夜夜嗨一区二区三区| 免费视频久久| 久久精品二区亚洲w码| 99热精品久久| 蜜桃视频第一区免费观看| 蜜桃一区二区三区在线观看| 欧美亚洲综合视频| 成人台湾亚洲精品一区二区 | 欧美精品一线| 久久av一区二区三区| 国产情侣久久| 日韩午夜黄色| 你懂的国产精品永久在线| 亚洲va中文在线播放免费| 日韩黄色大片| 久久永久免费| 蜜桃av一区二区| 免费国产自久久久久三四区久久 | 在线视频观看日韩| 国产精品一区三区在线观看| 久久三级中文| 亚洲综合精品| 久久精品天堂| 欧美日韩伊人| 亚洲一区二区三区在线免费| 精品一区电影| 亚洲精品九九| 喷白浆一区二区| 久久激情一区| 精品一区二区三区中文字幕在线| 国产精品高清一区二区| 日韩欧美美女在线观看| 在线亚洲精品| 欧美+日本+国产+在线a∨观看|