這個問題的主要目的是研究當程序中沒有顯示close掉已經open的文件,那么這個文件會在什么時候被close掉?
已經知道在C++中,打開的文件句柄沒有被close掉的話,那這個句柄只會在程序退出時才會被釋放掉,那么在python是否也是這樣的呢?接下來做個實驗:
1.有如下代碼:
import os class OpenFileTest: def openfile(self, filePath): handle = open(filePath, 'wb') pass if __name__ == "__main__": t = OpenFileTest() filePath = 'test.txt' t.openfile(filePath) os.remove(filePath)
print 'success'
執行此腳本結果如下:
沒有任何問題;
2.將代碼稍作改動,將 handle = open(filePath, 'wb') 替換為 self.handle = open(filePath, 'wb'),執行結果如下:
結論:由以上的表現可以得知,在第一個程序里由於handle是一個臨時的變量(對象),在函數openfile退出時,handle對象被釋放了,同時也把文件句柄給關閉了;而在第二個程序里,self.handle不再是一個臨時的對象,因此在openfile退出時就沒有釋放句柄,因此就無法刪除test.txt這個文件了;
這里也可以猜測一下,在python里,open返回的是一個類似C++里智能指針的東西,這樣就做到了handle釋放時關閉文件句柄;不過從編程規范上來說,還是主動調用close來關閉文件句柄吧。