日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:python中如何使用@contextmanage?

本文教程操作環(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?
標(biāo)題鏈接:http://m.5511xx.com/article/djsossi.html