裝飾器

什么是裝飾器?

裝飾器是一個(gè)特殊的函數(shù),可以理解為一種特殊的閉包。
詳見(jiàn)https://blog.csdn.net/ljt735029684/article/details/80703649

如何理解?

閉包:函數(shù)內(nèi)嵌套函數(shù)
將目標(biāo)函數(shù)當(dāng)作參數(shù)傳入閉包中,在不修改目標(biāo)函數(shù)的情況下,可以在閉包中進(jìn)行函數(shù)功能的增加。

有什么用?

比如你做了一個(gè)功能,每個(gè)部門都可以用,但是后來(lái)某個(gè)部門和你吵架了,你不想讓他用,就在原函數(shù)的基礎(chǔ)上加一個(gè)裝飾器,增加權(quán)限驗(yàn)證的功能,沒(méi)有密碼無(wú)法使用。代碼如下:

# -*- coding: utf-8 -*-
def get_fuc(fuc):
    def fuc_1():
        x = input("請(qǐng)輸入密碼:")#此處添加權(quán)限驗(yàn)證
        if x == "123456":
            fuc()#密碼正確才能調(diào)用該函數(shù)
        else:
            print("密碼錯(cuò)誤")#f否則提示密碼錯(cuò)誤
    return fuc_1


@get_fuc         //等同于test = get_fuc(test)#這是一個(gè)語(yǔ)法糖,所以裝飾器里不能返回fuc_1()
def test():
    print("歡迎回來(lái)")

裝飾器傳參

本質(zhì):在最外層構(gòu)建一個(gè)方法,將原來(lái)的裝飾器函數(shù)進(jìn)行返回

# -*- coding: utf-8 -*-
def get_fucc(pwd):
    def get_fuc(fuc):
        def fuc_1():
            x = input("請(qǐng)輸入密碼:")#此處添加權(quán)限驗(yàn)證
            if x == pwd:
                fuc()#密碼正確才能調(diào)用該函數(shù)
            else:
                print("密碼錯(cuò)誤,登錄失敗")#f否則提示密碼錯(cuò)誤
        return fuc_1
    return get_fuc


@get_fucc(pwd = "111111")    #等同于test = get_fuc(test)#這是一個(gè)語(yǔ)法糖,所以裝飾器里不能返回fuc_1()
def test():
    print("歡迎回來(lái)")
PS:如果要對(duì)類中的方法進(jìn)行裝飾,則裝飾函數(shù)應(yīng)該寫在類前面!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 閉包和裝飾器 1.8 閉包和裝飾器 學(xué)習(xí)目標(biāo) 1. 能夠說(shuō)出閉包的定義形式 2. 能夠說(shuō)出裝飾器的實(shí)現(xiàn)形式 ...
    Cestine閱讀 596評(píng)論 0 0
  • 在學(xué)習(xí) Python 的時(shí)候,慶幸自己有 JavaScript 的基礎(chǔ),在學(xué)習(xí)過(guò)程中,發(fā)現(xiàn)許多相似的地方,如導(dǎo)包的...
    柏丘君閱讀 1,275評(píng)論 2 8
  • 聞香識(shí)女人,沒(méi)有女人不愛(ài)香水,香水代表著女性的氣質(zhì)與品位更是專屬于你的獨(dú)有氣味,適合你的香型不僅會(huì)將你的氣質(zhì)完美的...
    Mini_0d8c閱讀 1,980評(píng)論 0 0
  • 文/張瑕 我愛(ài)你,切無(wú)法擁有你 不知道,放棄還是繼續(xù) 我只能,孤獨(dú)的思念你 你就向,一根尖尖的針 深...
    清傾紅塵閱讀 253評(píng)論 0 1
  • 在C++ Primer的第二章里面討論了該如何選擇正確的類型,這里是些自己的看法,和書上的不全一樣。 char, ...
    Roland閱讀 503評(píng)論 0 1

友情鏈接更多精彩內(nèi)容