2017-06-22 47 views
1

我有一點概念性問題。對於寫入文件 「to_file」,這部作品:爲什麼需要一個變量來打開文件

out_file = open(to_file, 'w') 
out_file.write(indata) 

...但是這並不:

(open(to_file, 'w')).write(indata) 

從理論上講,不應該換出一個變量(out_file)定義變量本身產生相同的結果?我很困惑,爲什麼創建變量的額外步驟是必要的。

+2

你爲什麼認爲其他案件不起作用?不要說這是缺少的變量。 –

回答

3

正如其他人指出的那樣,您的代碼實際上會打開並寫入文件。但是,...

在您的第二行代碼中,您現在沒有對打開的文件的引用。因此你無法關閉它或者做任何其他事情。

保持文件打開是資源泄漏。如果你的程序馬上關閉,Python會在結束之前嘗試關閉文件。但是由於各種原因,Python可能會失敗。例如,包含該文件的可移動磁盤驅動器在寫入文件之後但在程序結束之前可能會被刪除。這可能會使可移動驅動器上的文件無法讀取 - 而且我看到了這種情況。如果你的程序沒有立即關閉,你就會有這個額外的資源,需要佔用內存和其他資源,而這些資源是不需要的。如果您的計劃持續很長時間,增加的資源可能會減慢或停止計算機。

即使您的程序馬上關閉,這是一個壞習慣開發。您不僅想編寫程序,還希望編寫能夠在各種情況下運行良好的代碼。您可能會認爲「我永遠不會在長時間運行的程序中使用此代碼。」這種聲明常常被誤認爲是錯誤的。編碼很難 - 不要讓自己更難。避免你的第二個例子的「反模式」。

Python中有一個更好的模式,using the with statement。閱讀該鏈接並使用該模式,而不是兩個示例中的任何一個。

with open(to_file, 'w') as out_file: 
    out_file.write(indata) 

這兩行打開文件,將數據寫入文件,然後關閉文件。如果您想在文件關閉前對文件做更多處理,請將該代碼放在with語句下的縮進部分中。

0

在Python 2.7中,您提供的兩個示例都可以工作並寫入文件。

相關問題