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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:python上下文是什么

基本概念

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務海州,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

·上下文管理協(xié)議(Context Management Protocol)

包含方法__enter__ 和 __exit__,支持該協(xié)議的對象要實現(xiàn)這兩個方法。

·上下文管理器( Content Manager )

支持上下文管理協(xié)議的對象,實現(xiàn)了__enter__ / __exit__方法。上下文管理器定義執(zhí)行with語句時要建立的運行時上下文,負責執(zhí)行with語句塊上下文的進入和退出操作。通常使用with語句調(diào)用上下文管理器。

·運行時上下文( runtime context )

由上下文管理器創(chuàng)建,通過上下文管理器的__enter和__exit__方法實現(xiàn),__enter方法在語句體執(zhí)行之前進入運行時上下文,__exit__在語句題執(zhí)行完成后從上下文運行時退出。

·上下文表達式(Context Expression)

with 語句中跟在關(guān)鍵字with之后的表達式,該表達式返回一個上下文管理器對象。

·語句體(with-body)

with語句包裹起來的代碼塊,在執(zhí)行語句體之前調(diào)用上下文管理器的__enter__方法,執(zhí)行完語句體之后會執(zhí)行__exit__方法。

with不是上下文管理器。with只是一個語句。實現(xiàn)了__enter__和__exit__這兩個上下文管理協(xié)議方法的對象,都被稱作上下文管理器。
上下文管理器被with調(diào)用時,會創(chuàng)建運行時上下文,__enter__在語句體執(zhí)行之前進入運行時上下文,__exit__負責在語句執(zhí)行完成
之后退出。

with

with語句用上下文管理器定義的方法包裹一段代碼的執(zhí)行,等價于try...except..finally。with的主要作用是相當于finally。

一、多個上下文管理器

with A() as a,B() as b:
  suite

二、上下文管理器類型

context manager 是python中with語句用來定義運行時上下文的對象,上下文管理器控制著進/出運行時上下文的功能,上下文管理器通常由with語句出發(fā),也可以直接通過他們的方法來調(diào)用它們。上下文管理器通常用于保存和恢復各式各樣的全局狀態(tài)、加解鎖資源和關(guān)閉文件的文件等。

自定義上下文管理器

class TraceBlock:
    def message(self, arg):
        print('running ' + arg)
    def __enter__(self):
        print('starting with block')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is None:
            print('exited normally')
        else:
            print('raise an exception' + str(exc_type))
            return False
if __name__ == '__main__':
    with TraceBlock() as action:
        action.message('test1')
        raise Exception
        print('reached')

上下文裝飾器

因為自定義裝飾器比較麻煩,用contextlib.contextmanager將生成器轉(zhuǎn)化為上下文管理器,不必創(chuàng)建一個類或單獨指定__enter__和__exit__方法。

@contextmanager
def message(arg):
    print('running' + arg)
    yield 
    print('hello')
if __name__ == '__main__':
    with message('hell'):
        print('ok')

裝飾器,用來裝飾一個生成器函數(shù),使這個生成器函數(shù)稱為一個上下文管理器。

包含yield的函數(shù)才是生成器函數(shù),即contextmanager裝飾的函數(shù)必須含有yield!

@contextmanager
def make_context():
    print('enter')
    try:
        yield {}
    except Exception as err:
        print('error', err)
    finally:
        print('exit')
if __name__ == '__main__':
    with make_context() as value:
        raise Exception
        print(value)

生成器函數(shù)中yield之前的語句在__enter__方法中執(zhí)行;yield之后的語句在__exit__中執(zhí)行;yield產(chǎn)生的值賦值給as子句中的variable變量。如果有異常產(chǎn)生,在上面的例子中,能夠被except捕獲。

python學習網(wǎng),免費的在線學習python平臺,歡迎關(guān)注!


網(wǎng)頁名稱:創(chuàng)新互聯(lián)Python教程:python上下文是什么
本文URL:http://m.5511xx.com/article/ccdishs.html