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

理解python中裝飾器的作用

 更新時間:2021年07月19日 16:11:28   作者:紅番茄先生  
python裝飾器就是用于拓展原來函數(shù)功能的一種函數(shù),這個函數(shù)的特殊之處在于它的返回值也是一個函數(shù),使用python裝飾器的好處就是在不用更改原函數(shù)的代碼前提下給函數(shù)增加新的功能

裝飾器的作用就是用一個新函數(shù)封裝舊函數(shù)(是舊函數(shù)代碼不變的情況下增加功能)然后會返回一個新函數(shù),新函數(shù)就叫做裝飾器,一般為了簡化裝飾器會用語法糖@新函數(shù)來簡化

例子:

這是一段代碼,但功能太少,要對這個進行增強,但又不能改變代碼。

def hello():
    return "hello world!"

現(xiàn)在我們的需求是要增強hello()函數(shù)的功能,希望給返回加上HTML標(biāo)簽,比如<i>hello world</i>,但要求我們不得改變hello()函數(shù)原來的定義。

def makeitalic(fun):#makitalic傳了一個新函數(shù)
    def wrapped():#內(nèi)部函數(shù)
        return "<i>"+fun()+"</i>"#要加的新功能
    return wrapped#返回的是wrapped函數(shù)功能

def hello():#對這個功能進行增強
    return "hello world!"
#makeitalic里面?zhèn)魅肓薶ello函數(shù),然后內(nèi)部函數(shù)fun()函數(shù)也就相當(dāng)于hello函數(shù)了
hello_2=makeitalic(hello)
#打印新函數(shù),返回的就是<i>hello world!</i>
print(hello_2())

為了增強原函數(shù)hello的功能,定義了一個函數(shù),它接收原函數(shù)作為參數(shù),并返回一個新的函數(shù),在這個返回的函數(shù)中,執(zhí)行了原函數(shù),并對原函數(shù)的功能進行了增強。

事實上,makeitalic就是一個裝飾器(decorator),它封裝了原函數(shù)hello,并返回了一個新函數(shù),用于增強原函數(shù)的功能,并將其賦值給hello。

一般情況下,我們使用裝飾器提供的@語法糖(Syntactic Sugar),來簡化上面的操作。

####使用@語法糖
def makeitalic(fun):
    def wrapped():
        return "<i>" + fun() + "</i>"
    return wrapped

@makeitalic#使用了裝飾器可以直接調(diào)用,不需要賦值了
def hello():
    return "hello world"
print(hello())#使用了裝飾器可以直接調(diào)用,不需要賦值了

像上面的情況,可以動態(tài)的修改函數(shù)(或類的)功能的函數(shù)就是裝飾器。本質(zhì)上,它是一個高階函數(shù),以被裝飾的函數(shù)(比如上面的hello)為參數(shù),并返回一個包裝后的函數(shù)(比如上面的wrapped)給被修飾函數(shù)(hello)。

當(dāng)調(diào)用hello()函數(shù)時,hello函數(shù)的執(zhí)行流程如下分析:

1.把hello函數(shù)作為參數(shù)傳給@符號后面的裝飾器函數(shù)。

2.然后開始執(zhí)行裝飾器函數(shù),并返回一個包裝了的函數(shù),同時,改變原函數(shù)的指向,現(xiàn)在原函數(shù)指向了這個包裝函數(shù)。

3.執(zhí)行原函數(shù),其實此時執(zhí)行的是包裝了的函數(shù),所以說,裝飾器增強了一個現(xiàn)有函數(shù)的功能,但不會改變現(xiàn)有函數(shù)的定義。

普通裝飾器的使用形式:

@decorator
def fun():
 pass

#格式就如同下面的:

def fun():
 pass
fun = decorator(fun)#不使用語法糖要進行賦值

裝飾器可以定義多個,離函數(shù)定義最近的裝飾器最先被調(diào)用,比如:

@decotator_one
@decorator_two
def fun():
 pass

#格式如同下面的:

def fun():
 pass
fun = decorator_one(decorator_two(fun))

裝飾器還可以帶參數(shù),比如:

@decorator(arg1, arg2)
def fun():
 pass

#格式如同下面的:

def fun():
 pass
fun = decorator(arg1, arg2)(fun)

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

相關(guān)文章

  • Python單鏈表簡單實現(xiàn)代碼

    Python單鏈表簡單實現(xiàn)代碼

    這篇文章主要介紹了Python單鏈表簡單實現(xiàn)代碼,結(jié)合實例形式分析了Python單鏈表的具體定義與功能實現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • python基礎(chǔ)之面對對象基礎(chǔ)類和對象的概念

    python基礎(chǔ)之面對對象基礎(chǔ)類和對象的概念

    這篇文章主要介紹了python面對對象基礎(chǔ)類和對象的概念,實例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 利用Python?NumPy庫及Matplotlib庫繪制數(shù)學(xué)函數(shù)圖像

    利用Python?NumPy庫及Matplotlib庫繪制數(shù)學(xué)函數(shù)圖像

    最近開始學(xué)習(xí)數(shù)學(xué)了,有一些題目的函數(shù)圖像非常有特點,下面這篇文章主要給大家介紹了關(guān)于利用Python?NumPy庫及Matplotlib庫繪制數(shù)學(xué)函數(shù)圖像的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Python操作MySQL數(shù)據(jù)庫的基本方法(查詢與更新)

    Python操作MySQL數(shù)據(jù)庫的基本方法(查詢與更新)

    在工作中我們需要經(jīng)常對數(shù)據(jù)庫進行操作,比如 Oracle、MySQL、SQL Sever等,這篇文章主要給大家介紹了關(guān)于Python操作MySQL數(shù)據(jù)庫的基本方法包括了數(shù)據(jù)查詢與數(shù)據(jù)更新(新增、刪除、修改),需要的朋友可以參考下
    2023-09-09
  • Python實現(xiàn)爬取某站視頻彈幕并繪制詞云圖

    Python實現(xiàn)爬取某站視頻彈幕并繪制詞云圖

    這篇文章主要介紹了利用Python爬取某站的視頻彈幕,并將其繪制成詞云圖,文中的示例代碼講解詳細,對我學(xué)習(xí)Python爬蟲有一定的幫助,需要的朋友可以參考一下
    2021-12-12
  • python基于搜索引擎實現(xiàn)文章查重功能

    python基于搜索引擎實現(xiàn)文章查重功能

    這篇文章主要介紹了python基于搜索引擎實現(xiàn)文章查重功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 詳解如何在PyCharm控制臺中輸出彩色文字和背景

    詳解如何在PyCharm控制臺中輸出彩色文字和背景

    這篇文章主要介紹了詳解如何在PyCharm控制臺中輸出彩色文字和背景,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 利用python在大量數(shù)據(jù)文件下刪除某一行的例子

    利用python在大量數(shù)據(jù)文件下刪除某一行的例子

    今天小編就為大家分享一篇利用python在大量數(shù)據(jù)文件下刪除某一行的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 詳解Python中的array數(shù)組模塊相關(guān)使用

    詳解Python中的array數(shù)組模塊相關(guān)使用

    數(shù)組并不是Python中內(nèi)置的標(biāo)配數(shù)據(jù)結(jié)構(gòu),不過擁有array模塊我們也可以在Python中使用數(shù)組結(jié)構(gòu),下面我們就來詳解詳解Python中的array數(shù)組模塊相關(guān)使用
    2016-07-07
  • 對python requests的content和text方法的區(qū)別詳解

    對python requests的content和text方法的區(qū)別詳解

    今天小編就為大家分享一篇對python requests的content和text方法的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論

岐山县| 兰西县| 肃宁县| 阳江市| 河源市| 丽江市| 扎鲁特旗| 建平县| 乌兰县| 惠水县| 黄梅县| 鄂托克前旗| 平定县| 泸水县| 博罗县| 虞城县| 化州市| 安义县| 镇远县| 武城县| 西宁市| 西宁市| 洛川县| 沙田区| 宁河县| 林西县| 穆棱市| 怀仁县| 阿拉善盟| 乌兰察布市| 积石山| 吐鲁番市| 体育| 拜城县| 独山县| 聊城市| 芜湖县| 高陵县| 张家口市| 白朗县| 西平县|