python 代碼運行時間獲取方式詳解
我們知道為了提高代碼的運行速度,我們需要對書寫的python代碼進行性能測試,而代碼性能的高低的直接反饋是電腦運行代碼所需要的時間。這里將介紹四種常用的測試代碼運行速度的方法。
第一種:使用time模塊對代碼的運行時間進行統(tǒng)計,代碼如下:
import timeclass Debug: def mainProgram(self): start_time = time.time() for i in range(100): print(i) end_time = time.time() print(f'the running time is: {end_time - start_time} s') if __name__ == '__main__': main = Debug() main.mainProgram()
我們采用time 模塊給所要測試的代碼的前后加上時間戳,一個記為start_time,一個記作end_time,最后代碼塊的運行時間為end_time-start_time,單位為s(秒)。當(dāng)然在python中還有許多的記錄時間的模塊,這里不做過多討論,均類似于time模塊,實現(xiàn)思路上一致,代碼實現(xiàn)上大同小異。
第二種:使用IPython的Built-in magic commands,%time,代碼如下:
class Debug: def mainProgram(self): %time for i in range(100): print(i) main = Debug()main.mainProgram()'''Wall time: 1.99 ms'''
這個類定義是可以去掉的,并不會影響最終的結(jié)果,%time 后面加上想要計算時間的代碼,然后編譯器就會在運行后自動給出所測試代碼的運行時間,但是經(jīng)過測試,%time方法測出的時間并不準確,時間波動范圍非常大,這個是很好理解的,因為計算機每時每刻都在處理一些進程,也就是說計算機的運行狀態(tài)每時每刻都是不同的,所以在不同的時刻測試同一段代碼的運行時間也會得到不同的結(jié)果。
第三種:用IPython的另一個Built-in magic commands,%timeit,使用方法類似于%time,代碼如下:
class Debug: def mainProgram(self): %timeit for i in range(100): print(i) main = Debug()main.mainProgram()'''8.53 ms ± 452 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)'''
我們可以看到得到的結(jié)果是:每個循環(huán)8.53 ms±452 µs(平均±標準偏差,共運行7次,每個循環(huán)100個)%timeit相比于%time,%timeit會多次執(zhí)行測試代碼,并且會取它們運行時間的平均值,并且還會計算出它們的標準差,因此這種計算方法計算的結(jié)果相對于使用%time執(zhí)行測試代碼一次是比較準確的。
第四種:導(dǎo)入timeit模塊來計算代碼塊的執(zhí)行時間
import timeitclass Debug: def mainProgram(self): result = timeit.timeit(stmt='for i in range(100): print(i)', number=10) print(result)main = Debug()main.mainProgram()'''0.05363089999991644 s'''
導(dǎo)入timeit模塊后使用timeit.timeit()來測試想要測試的代碼,并且代碼以string的形式進行輸入,并且需要設(shè)定number值,設(shè)定測試的該段代碼需要執(zhí)行的次數(shù),最終我們得到0.05363089999991644,單位是s(秒),與內(nèi)置魔法方法%timeit方法不同的是雖然也是多次計算,但是最終獲取的時間是n次執(zhí)行代碼所需的總時間而不是執(zhí)行一次的時間。
至此,代碼的運行速度測試方法的介紹暫時告一段落。(以后可能會進一步更新更加全面的),更多相關(guān)python 代碼運行時間 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. vue實現(xiàn)web在線聊天功能2. IntelliJ IDEA設(shè)置自動提示功能快捷鍵的方法3. Java Bean與Map之間相互轉(zhuǎn)化的實現(xiàn)方法4. SpringBoot+TestNG單元測試的實現(xiàn)5. Springboot 全局日期格式化處理的實現(xiàn)6. 完美解決vue 中多個echarts圖表自適應(yīng)的問題7. Python使用urlretrieve實現(xiàn)直接遠程下載圖片的示例代碼8. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)9. Java使用Tesseract-Ocr識別數(shù)字10. JAMon(Java Application Monitor)備忘記
