[Python] open().read() in-line 寫法
Python 下使用檔案最直覺的寫法是這樣:
f = open(filename) # do something f.close()
或是這樣:
# Python 2.6+ # 離開 with 區塊時關閉檔案 with open(filename) as f: # do something
除了這兩種,還有一種更簡潔的寫法:
data = open(filename).read()
這種寫法我也喜歡用,但有一個問題 --- 檔案何時會被關閉?
答案是:在檔案物件被記憶體回收時關閉。
照這樣看來,這種 in-line 寫法如果不小心使用可能會造成問題 ( 如大量開啟檔案的情況 ),
但是在 [1] 中有提到,
Python 這方面並沒有規範,取決於 Python 版本的實作,
CPython (大多數的 Python 實作),會馬上關閉檔案,
因此不會造成問題,
其他 Python 實作 (IronPython, Jython) 則不必然。
相同情形也發生在以下寫法:
for x in open(filename): # do something
良好的習慣還是要確保檔案能正確的被關閉,
使用 with 語句應該是比較好的選擇 ( 前提是 Python 2.6 版以上 )
參考:
[2] In the Inline “open and write file” is the close() implicit?