with open("hello.txt", "wb") as f: f.write("Hello Python!\n")
似乎是一樣在Python中使用'with .. as'語句有什麼好處?
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
什麼是採用開放的優勢。作爲代替F =? 它只是語法糖?只保存一行代碼?
with open("hello.txt", "wb") as f: f.write("Hello Python!\n")
似乎是一樣在Python中使用'with .. as'語句有什麼好處?
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
什麼是採用開放的優勢。作爲代替F =? 它只是語法糖?只保存一行代碼?
時,爲了等同於with
報表版本,你寫的代碼看起來應該不是這樣的代碼更乾淨:
f = open("hello.txt", "wb")
try:
f.write("Hello Python!\n")
finally:
f.close()
雖然這看起來像語法糖,它確保您釋放資源。通常情況下,這個世界比這些人爲的例子更復雜,如果你忘記了一個try.. except...
或者無法處理極端情況,那麼你的資源泄漏就在你手上。
with
語句將您從這些泄漏中解脫出來,從而更易於編寫乾淨的代碼。有完整的解釋,請看PEP 343,它有很多例子。
它是'except',而不是'catch' – SilentGhost 2010-04-29 15:15:31
@SilentGhost:謝謝。 – 2010-04-29 16:10:40
@SilentGhost:很好。 – 2012-10-18 07:01:59
如果在f.write()
期間發生異常,前者仍然關閉f
。
如果f.write
拋出一個異常,當您使用with
f.close()
被調用,並在第二種情況下不會被調用。此外f
有一個較小的範圍和使用with.
http://effbot.org/zone/python-with-statement.htm – 2010-04-29 15:03:00
更多有用的關於RAII的閱讀http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – wescpy 2010-04-29 18:13:38