2017-05-28 19 views
2

我知道with塊會在您退出該塊後自動調用close(),並且通常用於確保不會忘記關閉文件。帶塊或close()更多Pythonic?

似乎有

with open(file, 'r+') as f: 
    do_things(f) 

f = open(file, 'r+') 
do_things(f) 
f.close() 

是一種方法比其他更Python之間沒有技術上的差異?我應該在我的代碼中使用哪一個?

+3

還有就是兩者之間巨大的技術差! 'with'版本確保'close()'被調用,即使'do_things()引發異常。你需要添加一個'try'和'finally'到另一個版本來匹配這個行爲。 – jasonharper

+1

FWIW,我不認爲這個問題是重複的3012488.這些主題確實重疊,但另一個問題非常廣泛,並沒有具體說明哪種方法更適合關閉文件。 –

回答

4

Pythonic比其他的方式更單一嗎?

是的,with-statement表單是首選,它將文件管理邏輯封裝到一行代碼中。提高了業務邏輯與管理邏輯的比率,使程序更易於閱讀和推理。

PEP 343,該用陳述的預期目的是:

This PEP adds a new statement "with" to the Python language to make 
it possible to factor out standard uses of try/finally statements.