新聞中心
本文教程操作環(huán)境:windows7系統(tǒng)、python 3.9.1,DELL G3電腦。

1、實現(xiàn)邏輯
(1)初始化一個 _GeneratorContextManager 類,構(gòu)造方法接受了一個生成器 gen
(2)這個類實現(xiàn)了上下文管理器協(xié)議 __enter__ 和 __exit__
(3)執(zhí)行 with 時會進(jìn)入到 __enter__ 方法,然后執(zhí)行這個生成器,執(zhí)行時會運行到 with 語法塊內(nèi)的 yield 處
(4)__enter__ 返回 yield 的結(jié)果
(5)如果 with 語法塊沒有發(fā)生異常,with 執(zhí)行結(jié)束后,會進(jìn)入到 __exit__ 方法,再次執(zhí)行生成器,這時會運行 yield 之后的代碼邏輯
(6)如果 with 語法塊發(fā)生了異常,__exit__ 會把這個異常通過生成器,傳入到 with 語法塊內(nèi),也就是把異常拋給調(diào)用者
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')
#應(yīng)用上下文管理器
with make_resource() as r:
r.query()以上就是python中使用@contextmanage的方法,大家在操作之前,一定要先就具體的@contextmanage實現(xiàn)邏輯進(jìn)行了解,然后再展開相關(guān)的實例操作。
本文題目:創(chuàng)新互聯(lián)Python教程:python中如何使用@contextmanage?
當(dāng)前地址:http://m.fisionsoft.com.cn/article/djsossi.html


咨詢
建站咨詢
