更新時間:2022年10月25日09時41分 來源:傳智教育 瀏覽次數(shù):
我們之前在介紹finally語句時,說過finally語句用于釋放資源,如關(guān)閉文件等。除了在finally語句中手動釋放資源以外,還可以使用with語句預定義清理操作,即無論資源在使用過程中是否發(fā)生異常,都會執(zhí)行釋放資源的操作,比如文件使用后自動關(guān)閉。
Python2.5開始(如果要在Python2.5中使用with語句,需通過from _future_ importwith_statement導入)引入了with語句,從2.6版本正式啟用。with語句適用于對資源進行訪問的場合,確保不管使用過程中是否發(fā)生異常都會執(zhí)行必要的“清理”操作,釋放資源。
with語句的基本語法如下:
with 上下文表達式 [as 資源對象]: 對象的操作
上述語法格式表示的含義如下。
·上下文表達式:返回一個上下文管理器對象。若指定了as子句,該對象并不賦值給資源對象,而是將上下文管理器的___enter___()方法的返回值賦值給資源對象。
·資源對象:可以是單個變量,也可以是元組。
·對象的操作:with語句包裹的代碼塊。在執(zhí)行該代碼塊之前,會調(diào)用上下文管理器的___enter___()方法;在執(zhí)行代碼塊之后,會執(zhí)行___exit___()方法。
使用with語句操作文件對象的示例如下:
with open("/tmp/foo.txt") as file: data = file.read()
上述示例使用with語句打開文件。如果能順利打開文件,則將文件對象賦值給file,然后調(diào)用read方法讀取了file對象的數(shù)據(jù)。當對文件的操作結(jié)束以后,with語句會關(guān)閉文件。即使這段代碼在運行的過程中產(chǎn)生了異常,with語句也會關(guān)閉文件。