更新時(shí)間:2021-03-10 來(lái)源:黑馬程序員 瀏覽量:
with語(yǔ)句之所以能夠自動(dòng)關(guān)閉資源,是因?yàn)樗褂昧艘环N名為上下文管理的技術(shù)管理資源。接下來(lái),對(duì)上下文管理器的知識(shí)進(jìn)行介紹。
1.上下文管理協(xié)議(Context Manager Protocol)
上下文管理協(xié)議包括了__enter__()和__exit__()方法,支持該協(xié)議的對(duì)象均需要實(shí)現(xiàn)了這兩個(gè)方法。__enter__()和__exit__()方法的含義與用途如下所示:
__enter__(self):進(jìn)入上下文管理器時(shí)調(diào)用此方法,它的返回值被放入with-as語(yǔ)句as說(shuō)明符指定的變量中。
__exit__(self, type, value, traceback):離開(kāi)上下文管理器時(shí)調(diào)用此方法。在__exit__()方法中,參數(shù)type、value、traceback的含義分別為:異常的類型、異常值、異常回溯追蹤。如果__exit__()方法內(nèi)部引發(fā)異常,該異常會(huì)覆蓋掉其執(zhí)行體中引發(fā)的異常。處理異常時(shí)不需要重新拋出異常,只需要返回False。
2.上下文管理器(Context Manager)
支持上下文管理協(xié)議的對(duì)象就是上下文管理器,這種對(duì)象實(shí)現(xiàn)了__enter__()和__exit__()方法。通過(guò)with語(yǔ)句即可調(diào)用上下文管理器,它負(fù)責(zé)建立運(yùn)行時(shí)的上下文。
3.上下文表達(dá)式(Context Expression)
with語(yǔ)句中關(guān)鍵字with之后的表達(dá)式返回一個(gè)支持上下文管理協(xié)議的協(xié)議的對(duì)象,也就是返回一個(gè)上下文管理器。
4.運(yùn)行時(shí)上下文
由上下文管理器創(chuàng)建,通過(guò)上下文管理器的__enter__()和__exit__()方法實(shí)現(xiàn)。__enter__()方法在語(yǔ)句體執(zhí)行之前執(zhí)行,__exit__()方法在語(yǔ)句體執(zhí)行之后執(zhí)行。
猜你喜歡
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營(yíng)】深圳跨境電商運(yùn)營(yíng)畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開(kāi)發(fā)】上海校區(qū)AI鴻蒙開(kāi)發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19