av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

python中@contextmanager實例用法

瀏覽:87日期:2022-06-28 09:12:42

在對于python中的裝飾器,我們一般會使用它輔助方法。在我們學習的上下文管理器中,有一個@contextmanager裝飾器,它能夠幫助我們在函數中定義上下文管理器方法,實現代碼方面的簡化。下面我們就python中@contextmanager的概念、使用注意、實例進行分享。

1、概念

是contextlib模塊提供的一個裝飾器,用于將一個函數聲明上下文管理,無需創建一個類或者單獨的__enter__()方法和__exit__()方法,就可以實現上下文管理。

2、注意

裝飾器@contextmanager真正的用法并不是簡化上下文管理器,而是去定義上下文管理器的方法,是對原來不是上下文管理器的類變成了一個上下文管理器。

3、實例

from contextlib import contextmanagerimport time@contextmanagerdef demo(label): start = time.time() try: yield finally: end = time.time() print(’{}: {}’.format(label, end - start))with demo(’counting’): n = 10000000 while n > 0: n -= 1# counting: 1.32399988174

看上面這個例子,函數中yield之前的所有代碼都類似于上下文管理器中__enter__方法的內容。而yield之后的所有代碼都如__exit__方法的內容。如果執行過程中發生了異常,則會在yield語句觸發。

實例擴展:

實例一:

from contextlib import contextmanagerclass File(): def query(self): print(’查詢文件’)@contextmanagerdef open(): print(’打開文件’) yield File() print(’關閉文件’)with open() as f: f.query() # 結果 打開文件 查詢文件 關閉文件

實例二:

from contextlib import contextmanagerclass DataBase(): def query(self): print(’寫入操作’) @contextmanager def open(self): try: yield self.commit() except Exception as e: self.rollback() raise edb = DataBase()with db.open(): db.query()

到此這篇關于python中@contextmanager實例用法的文章就介紹到這了,更多相關python中@contextmanager是什么內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 欧美精品网站 | 精品国模一区二区三区欧美 | 亚洲综合视频 | 欧洲一区二区在线 | 黄片毛片在线观看 | 天天看天天干 | 欧美视频第三页 | 一区二区三区四区不卡 | 欧美影院久久 | 精品av天堂毛片久久久借种 | 青青草一区二区 | 亚洲人成一区二区三区性色 | 久久69精品久久久久久久电影好 | 国产一区免费 | 久久久久欧美 | 亚洲国产精久久久久久久 | av大片在线 | www.亚洲成人网 | 久久精品久久久久久 | 欧美亚洲国产一区二区三区 | 五月天天丁香婷婷在线中 | 久久亚洲欧美日韩精品专区 | 日韩免费一区二区 | 久久精品亚洲国产奇米99 | 91国内产香蕉 | 日韩欧美一区二区三区在线播放 | 日韩中文字幕一区 | 黑人一级片视频 | 国产精品欧美一区二区三区不卡 | 99精品在线 | 日韩中文在线 | 日韩一级一区 | 国产黄色一级电影 | 一区二区三区亚洲视频 | 免费看国产一级特黄aaaa大片 | av天天干 | 欧美日韩网站 | 黄免费观看 | 99久久婷婷国产综合精品电影 | 欧美性久久久 | 91精品国产一区二区三区 |