掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
本文教程操作環(huán)境:windows7系統(tǒng)、python 3.9.1,DELL G3電腦。

1、實現(xiàn)邏輯
(1)初始化一個 _GeneratorContextManager 類,構造方法接受了一個生成器 gen
(2)這個類實現(xiàn)了上下文管理器協(xié)議 __enter__ 和 __exit__
(3)執(zhí)行 with 時會進入到 __enter__ 方法,然后執(zhí)行這個生成器,執(zhí)行時會運行到 with 語法塊內的 yield 處
(4)__enter__ 返回 yield 的結果
(5)如果 with 語法塊沒有發(fā)生異常,with 執(zhí)行結束后,會進入到 __exit__ 方法,再次執(zhí)行生成器,這時會運行 yield 之后的代碼邏輯
(6)如果 with 語法塊發(fā)生了異常,__exit__ 會把這個異常通過生成器,傳入到 with 語法塊內,也就是把異常拋給調用者
2、使用實例
在Python中,可以使用裝飾器 @contextmanager來簡化上下文管理器,也就是不需要定義__enter__和__exit__方法。
class MyContent:
def query(self):
print('query data')
# 需要引入contextmanager
from contextlib import contextmanager
@contextmanager
def make_resource():
print('first connect to resource')
yield MyContent()
print('close resource connection')
#應用上下文管理器
with make_resource() as r:
r.query()以上就是python中使用@contextmanage的方法,大家在操作之前,一定要先就具體的@contextmanage實現(xiàn)邏輯進行了解,然后再展開相關的實例操作。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流