最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python timeit模塊原理及使用方法

 更新時間:2020年10月10日 09:10:17   作者:lincappu  
這篇文章主要介紹了Python timeit模塊原理及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

現(xiàn)在使用 timeit() 來測試上面兩個函數(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)

運行結(jié)果:

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

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

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

繼續(xù)使用 timeit() 測試上面代碼的運行時間,只是這次是直接將代碼傳入到參數(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)

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

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

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

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

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

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

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

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

現(xiàn)在使用 repeat() 來測試上面兩個函數(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)

運行結(jié)果如下:

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

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

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

運行結(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 類測試運行時間

1. Timer 類介紹

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

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

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

2. 測試列表頭部添加

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

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

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)

運行結(jié)果如下:

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

3. 測試列表尾部添加

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

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)

運行結(jié)果如下:

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

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

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

相關(guān)文章

  • Pandas借助Numpy實現(xiàn)優(yōu)化的條件檢索代碼

    Pandas借助Numpy實現(xiàn)優(yōu)化的條件檢索代碼

    Numpy其實是最早的處理數(shù)據(jù)的Python庫,它的核心ndarray對象,是一個高效的n維數(shù)組結(jié)構(gòu),本文主要介紹了Pandas如何借助Numpy優(yōu)化條件檢索,感興趣的可以了解下
    2024-03-03
  • Python使用protobuf序列化和反序列化的實現(xiàn)

    Python使用protobuf序列化和反序列化的實現(xiàn)

    protobuf是一種二進制的序列化格式,相對于json來說體積更小,傳輸更快,本文主要介紹了Python使用protobuf序列化和反序列化的實現(xiàn),感興趣的可以了解一下
    2021-05-05
  • python實現(xiàn)春晚魔術(shù)的示例代碼

    python實現(xiàn)春晚魔術(shù)的示例代碼

    本文主要介紹了python實現(xiàn)春晚魔術(shù)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Python classmethod裝飾器原理及用法解析

    Python classmethod裝飾器原理及用法解析

    這篇文章主要介紹了Python classmethod裝飾器原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • django有外鍵關(guān)系的兩張表如何相互查找

    django有外鍵關(guān)系的兩張表如何相互查找

    這篇文章主要介紹了django有外鍵關(guān)系的兩張表如何相互查找,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python歸并排序算法過程實例講解

    python歸并排序算法過程實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python歸并排序算法過程實例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • Python讀寫unicode文件的方法

    Python讀寫unicode文件的方法

    這篇文章主要介紹了Python讀寫unicode文件的方法,涉及Python針對文件的讀取及編碼操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語言的寫法),對于字符串連接,相比于簡單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進入文章了解更詳細相關(guān)知識內(nèi)容吧
    2022-02-02
  • 解決pycharm不能自動保存在遠程linux中的問題

    解決pycharm不能自動保存在遠程linux中的問題

    這篇文章主要介紹了解決pycharm不能自動保存在遠程linux中的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • python遞歸刪除指定目錄及其所有內(nèi)容的方法

    python遞歸刪除指定目錄及其所有內(nèi)容的方法

    下面小編就為大家?guī)硪黄猵ython遞歸刪除指定目錄及其所有內(nèi)容的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

华蓥市| 三门县| 钦州市| 讷河市| 临高县| 仁布县| 林周县| 曲阳县| 建昌县| 张家港市| 江口县| 彰化县| 朝阳市| 昔阳县| 吉林市| 高邑县| 西城区| 冀州市| 张北县| 霍城县| 英吉沙县| 云浮市| 周至县| 彭阳县| 库尔勒市| 全州县| 彭州市| 桂东县| 呼伦贝尔市| 花莲市| 美姑县| 慈溪市| 泸定县| 瑞金市| 无极县| 社旗县| 囊谦县| 上林县| 新乡县| 稷山县| 永城市|