1. 程式人生 > 其它 >Python的輸出print語句是否會顯著降低執行速度?

Python的輸出print語句是否會顯著降低執行速度?

先說結論,會,並且執行時間是一般賦值語句的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

感覺這個問題還是很有趣的,就在部落格園裡也記錄一下。