最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中@contextmanager裝飾器的用法詳解

 更新時(shí)間:2023年07月21日 09:24:45   作者:發(fā)條宇  
這篇文章主要介紹了python中@contextmanager裝飾器的用法詳解,@contextmanager 的作用就是我們可以把一個(gè)非自定義類改成一個(gè)上下文管理器,需要的朋友可以參考下

@contextmanager 的作用就是我們可以把一個(gè)非自定義類改成一個(gè)上下文管理器。

這個(gè)會(huì)經(jīng)常遇到,所以有必要理解一下。

上下文管理器 是有 enter__和__exit ,那么我們可以為需要改寫的普通類創(chuàng)建一個(gè)子類,在其中添加上__enter__和__exit__方法通過(guò)繼承父類的方式實(shí)現(xiàn)上下文管理器。

但是通過(guò)contextlib模塊下提供的@contextmanager裝飾器,我們能夠更方便的將一個(gè)普通類變成上下文管理器。

@contextmanager通過(guò)將一個(gè)函數(shù)變成生成器的方式來(lái)為普通類添加進(jìn)入和退出時(shí)的處理代碼,從而實(shí)現(xiàn)了將普通類變成一個(gè)上下文管理器。

還是拿文件來(lái)舉個(gè)例子 # 結(jié)果 打開(kāi)文件 查詢文件 關(guān)閉文件

from contextlib import contextmanager
class File():
    def query(self):
        print('查詢文件')
@contextmanager
def open():
    print('打開(kāi)文件')
    yield File()
    print('關(guān)閉文件')
with open() as f:
    f.query()

執(zhí)行的順序:

①with語(yǔ)句調(diào)用open函數(shù)=>②執(zhí)行open中yield之前的代碼(打開(kāi)文件)=>③執(zhí)行yield語(yǔ)句中的代碼(File())=>④執(zhí)行with語(yǔ)句中的代碼(f.query)=>⑤執(zhí)行yiled語(yǔ)句后的代碼(關(guān)閉文件)

注意:

  • 此時(shí)的with語(yǔ)句后是調(diào)用被修飾的函數(shù),而不是實(shí)例化上下文管理器對(duì)象
  • with open() as f 中的f是yield語(yǔ)句中的內(nèi)容,上述示例中即所創(chuàng)建的File對(duì)象
  • yield前、中、后的代碼都可以省略不寫

栗子2:

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

重點(diǎn)理解執(zhí)行順序 ①with語(yǔ)句調(diào)用open函數(shù)=>②執(zhí)行try異常判斷=>③執(zhí)行with語(yǔ)句中的寫入操作=>④執(zhí)行數(shù)據(jù)庫(kù)的提交操作=>⑤如果出現(xiàn)異常執(zhí)行數(shù)據(jù)庫(kù)回滾操作

小結(jié):

1.在思考過(guò)程中我們可以假設(shè)with語(yǔ)句中的內(nèi)容整體移到了yield語(yǔ)句后,從而將with語(yǔ)句的執(zhí)行簡(jiǎn)化為@contextmanager所修飾的函數(shù)的執(zhí)行

2.當(dāng)我們需要在一段代碼的執(zhí)行前后加上其他的處理代碼時(shí)都可以使用@contextmanager來(lái)完成,并不需要一定是對(duì)上下文管理器的操作

到此這篇關(guān)于python中@contextmanager裝飾器的用法詳解的文章就介紹到這了,更多相關(guān)python的@contextmanager裝飾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲使用bs4方法實(shí)現(xiàn)數(shù)據(jù)解析

    Python爬蟲使用bs4方法實(shí)現(xiàn)數(shù)據(jù)解析

    這篇文章主要介紹了Python爬蟲使用bs4方法實(shí)現(xiàn)數(shù)據(jù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python自動(dòng)搶紅包教程詳解

    Python自動(dòng)搶紅包教程詳解

    在本篇文章里小編給大家整理了關(guān)于Python自動(dòng)搶紅包的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • OpenCV半小時(shí)掌握基本操作之邊界填充

    OpenCV半小時(shí)掌握基本操作之邊界填充

    這篇文章主要介紹了OpenCV基本操作之邊界填充,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python實(shí)現(xiàn)四舍五入方式

    python實(shí)現(xiàn)四舍五入方式

    這篇文章主要介紹了python實(shí)現(xiàn)四舍五入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python的Template使用指南

    python的Template使用指南

    本文主要講解了python中Template使用方法以及使用技巧,非常實(shí)用,有需要的朋友可以參考下
    2014-09-09
  • 使用Python實(shí)現(xiàn)LLM的模型遷移

    使用Python實(shí)現(xiàn)LLM的模型遷移

    在當(dāng)今的人工智能領(lǐng)域,大型語(yǔ)言模型(LLM)如GPT、BERT等已經(jīng)成為了研究和應(yīng)用的熱點(diǎn),但其訓(xùn)練和部署成本高昂,且在不同領(lǐng)域或任務(wù)間的遷移能力有限,因此,如何有效地實(shí)現(xiàn)LLM的模型遷移,成為了一個(gè)重要的研究方向,本文將深入探討如何使用Python實(shí)現(xiàn)LLM的模型遷
    2025-02-02
  • numpy求矩陣的特征值與特征向量(np.linalg.eig函數(shù)用法)

    numpy求矩陣的特征值與特征向量(np.linalg.eig函數(shù)用法)

    這篇文章主要介紹了numpy求矩陣的特征值與特征向量(np.linalg.eig函數(shù)用法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 通過(guò)Python快速獲取Excel工作表名的方法示例

    通過(guò)Python快速獲取Excel工作表名的方法示例

    在數(shù)據(jù)分析與辦公自動(dòng)化領(lǐng)域,通過(guò)Python處理Excel文件已成為必備技能,通過(guò)獲取工作表名稱,我們可以:快速了解文件結(jié)構(gòu)、自動(dòng)化處理多工作表數(shù)據(jù)、批量執(zhí)行跨表格操作,本文將通過(guò)兩個(gè)示例詳解如何借助一個(gè)免費(fèi)庫(kù)通過(guò)Python讀取Excel工作表名稱,需要的朋友可以參考下
    2025-04-04
  • python高級(jí)特性簡(jiǎn)介

    python高級(jí)特性簡(jiǎn)介

    這篇文章主要介紹了python高級(jí)特性的相關(guān)內(nèi)容,其中包括切片,迭代,列表生成式,生成器,迭代器,感興趣的朋友可以了解下
    2020-08-08
  • flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路

    flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路

    這篇文章主要為大家介紹了flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論

普兰店市| 资源县| 城固县| 襄汾县| 太白县| 天津市| 天峨县| 福建省| 怀安县| 普安县| 西乌| 通河县| 沁阳市| 万宁市| 绍兴县| 淮阳县| 库尔勒市| 静乐县| 承德市| 进贤县| 福安市| 池州市| 天台县| 锦州市| 梅河口市| 高淳县| 博野县| 福清市| 太原市| 买车| 太仓市| 客服| 嘉峪关市| 武邑县| 天峻县| 凭祥市| 静安区| 巍山| 景东| 锦屏县| 东阿县|