更新時間:2021-03-10 來源:黑馬程序員 瀏覽量:
with語句之所以能夠自動關(guān)閉資源,是因為它使用了一種名為上下文管理的技術(shù)管理資源。接下來,對上下文管理器的知識進行介紹。
1.上下文管理協(xié)議(Context Manager Protocol)
上下文管理協(xié)議包括了__enter__()和__exit__()方法,支持該協(xié)議的對象均需要實現(xiàn)了這兩個方法。__enter__()和__exit__()方法的含義與用途如下所示:
__enter__(self):進入上下文管理器時調(diào)用此方法,它的返回值被放入with-as語句as說明符指定的變量中。
__exit__(self, type, value, traceback):離開上下文管理器時調(diào)用此方法。在__exit__()方法中,參數(shù)type、value、traceback的含義分別為:異常的類型、異常值、異?;厮葑粉?。如果__exit__()方法內(nèi)部引發(fā)異常,該異常會覆蓋掉其執(zhí)行體中引發(fā)的異常。處理異常時不需要重新拋出異常,只需要返回False。
2.上下文管理器(Context Manager)
支持上下文管理協(xié)議的對象就是上下文管理器,這種對象實現(xiàn)了__enter__()和__exit__()方法。通過with語句即可調(diào)用上下文管理器,它負責(zé)建立運行時的上下文。
3.上下文表達式(Context Expression)
with語句中關(guān)鍵字with之后的表達式返回一個支持上下文管理協(xié)議的協(xié)議的對象,也就是返回一個上下文管理器。
4.運行時上下文
由上下文管理器創(chuàng)建,通過上下文管理器的__enter__()和__exit__()方法實現(xiàn)。__enter__()方法在語句體執(zhí)行之前執(zhí)行,__exit__()方法在語句體執(zhí)行之后執(zhí)行。
猜你喜歡
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)當(dāng)天offer率91%,薪資1W+占比54.2%,班級均薪12k+
2025-09-19