Python的輸出print語句是否會顯著降低執行速度?
阿新 • • 發佈:2022-12-12
先說結論,會,並且執行時間是一般賦值語句的200倍左右,這個知乎回答是我昨天寫的,內容是相同的。
首先既然是探討輸出是否影響程式執行時間,那肯定就要控制是否輸出作為唯一變化的參量,並獲取在不同規模下的資料量的影響。
以python為例,程式碼如下:
import datetime import numpy as np fn = open('/exports/hhr346/run.txt', 'w') for time in np.arange(1, 50): start = datetime.datetime.now() start_second = start.second start_microsecond = start.microsecond for a in range(1000*time): a += 1 #print('a is ', a) end = datetime.datetime.now() end_second = end.second end_microsecond = end.microsecond delta = (end_second - start_second)*1000000 + (end_microsecond - start_microsecond) fn.write('{}'.format(delta)) fn.write('\n')
輸出a的部分為控制是否輸出的語句,前後的不同僅為是否註釋
匯出寫入的文字檔案來畫圖
從結果上可以看到,二者都大致是線性關係,不同的是選擇輸出時,結果的隨機性更大,但是線性關係是顯著的;選擇print時,單次迴圈的時間增量在同等條件下是不print的200倍,所以print對於執行時間的影響還是相當大的。
後續可以去探究列印字元的多少對執行時間的影響程度,多列印字元是否時間就會更多?不同語言是否影響不同?
實際上這部分探究只能算是一種粗略的探究,程式還存在一些問題,因為獲取的是微秒和秒,所以執行時不要跨分鐘,否則就會出現離譜的負數;還有就是使用的datetime
返回的時間實際上和系統的效能和延遲有關,所以實際上精度並不太高,並且有些時候也可以觀察到輸出並不是線性增長的。
並且在驗證的過程應用了獲取時間和寫入檔案這樣“多餘”的操作(還有匯入模組影響的時間),必然會對總體執行時間造成影響,所以也許更好的方法是一個個用 time
命令來獲取每次執行的時間?(bushi
感覺這個問題還是很有趣的,就在部落格園裡也記錄一下。