python之with語句

原文地址?

with語句是一種與異常處理相關(guān)的功能。with語句適用于對(duì)資源進(jìn)行訪問的場(chǎng)合,確保不管使用過程中是否發(fā)生異常都會(huì)執(zhí)行必要的"清理"操作,釋放資源。比如文件使用后自動(dòng)關(guān)閉,線程中鎖的自動(dòng)獲取和釋放。

有了上下文管理器,with語句才能工作。下面是一組與上下文管理器和with語句有關(guān)的概念。

上下文管理協(xié)議(Context Management Protocol): 包含方法__enter__() 和__exit__(), 支持該協(xié)議的對(duì)象要實(shí)現(xiàn)這兩個(gè)方法。

上下文管理器(Context Manager): 支持上下文管理協(xié)議的對(duì)象,這種對(duì)象的實(shí)現(xiàn)了__enter__()和__exit__()方法。上下文管理器定義執(zhí)行with語句時(shí)要建立的運(yùn)行時(shí)上下文,負(fù)責(zé)執(zhí)行with語句塊上下文中的進(jìn)入與退出的操作。通常使用with語句調(diào)用上下文管理器,也可以通過直接調(diào)用其方法來使用。

運(yùn)行時(shí)上下文(runtime context):有上下文管理器創(chuàng)建,通過上下文管理器的__enter__()和__exit__()方法實(shí)現(xiàn),__enter__()方法在語句執(zhí)行之前進(jìn)入運(yùn)行時(shí)上下文,__exit__()在語句體執(zhí)行完和哦從上下文退出,with語句支持運(yùn)行時(shí)上下文這一概念。

上下文表達(dá)式(Context Expression):with語句中跟在關(guān)鍵字with之后的表達(dá)式,該表達(dá)式要返回一個(gè)上下文管理器對(duì)象。

語句體(with-body):with語句包裹起來的代碼塊,在執(zhí)行語句體之前會(huì)調(diào)用上下文管理器的__enter__()方法,執(zhí)行完語句體之后會(huì)執(zhí)行__exit__()方法。

with 語句的語法格式

with context_expression [as target(s)]:

??????? with-body

context_expression 要返回一個(gè)上下文管理器對(duì)象。該對(duì)象并不賦值給as字句中的target(s),如果指定了as字句的話,會(huì)將上下文管理器的__enter__()方法的返回值賦值給target(s).target(s)可以是單個(gè)變量,或者由"()"括起來的元組.

eg:

with open(r'somefileName') as somefile:

??????? for line in somefile:

??????? print line

??????? # ...more code

這里使用了with語句,不管在處理文件過程中是否發(fā)生異常,都會(huì)保證with語句執(zhí)行完畢后已經(jīng)關(guān)閉了打開的文件句柄。

對(duì)應(yīng)的傳統(tǒng)的try/finally范式,則要使用類似如下代碼:

somefile = open(r"sonmefileName")

try:

?????? for line in somefile:

?????? print line

?????? # ... more code

finally:

?????? somefile.close()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自:http://mp.weixin.qq.com/s/LO1yyFeUA6pR_YPyfDoSig 姓名:梅...
    虐先森閱讀 1,487評(píng)論 0 1
  • 本文轉(zhuǎn)自淺談Python的with語句 引言 with 語句是從 Python 2.5 開始引入的一種與異常處理相...
    Syfun閱讀 4,071評(píng)論 0 50
  • contextlib — Context Manager Utilities contextlib - 上下文管理...
    英武閱讀 2,987評(píng)論 0 52
  • 術(shù)語 要使用 with 語句,首先要明白上下文管理器這一概念。有了上下文管理器,with 語句才能工作。下面是一組...
    lmem閱讀 342評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139

友情鏈接更多精彩內(nèi)容