python裝飾器的簡單使用

首先應(yīng)該理解裝飾器的原理是什么以及為什么使用裝飾器傅联?其實主要就是兩個特性:

a、不改變原函數(shù)的內(nèi)部結(jié)構(gòu)和執(zhí)行方式
b巡验、為原函數(shù)增加功能
比如你現(xiàn)在有一個home函數(shù)损离,客戶需要訪問home頁面,執(zhí)行home()禁谦,返回到home頁面,但是正常情況下我們需要檢查客戶是否已經(jīng)登錄胁黑,如果已經(jīng)登錄就直接回復(fù)home頁面,如果沒有登錄就需要返回到登錄頁面州泊,解決方式有兩種:1丧蘸、修改home函數(shù),在函數(shù)內(nèi)部做判斷拥诡,但是這樣其他人調(diào)用home函數(shù)就可能出現(xiàn)問題触趴,2氮发、使用裝飾器,判斷是否已經(jīng)登錄冗懦,在其他的頁面也需要用到爽冕,比如首頁也可以,這樣利用率很高

1披蕉、不帶參數(shù)的裝飾器

def login(func):
    def wrapper(*args, **kwargs):
        print('do something')
        return func(*args, **kwargs)
    return wrapper
@login
def funcB(name):
    print('my name is {}'.format(name))
if __name__ == '__main__':
    funcB('alex')

運行結(jié)果是:

do something
my name is alex

其實這個裝飾器的本質(zhì)就是a=login(funcB),然后執(zhí)行a('alex')颈畸,a是一個變量,此時我們也可以用原函數(shù)名funcB代替a没讲,同樣也是執(zhí)行原函數(shù)眯娱,如下:

def login(func):
    def wrapper(*args, **kwargs):
        print('do something')
        return func(*args, **kwargs)
    return wrapper
def funcB(name):
    print('my name is {}'.format(name))

if __name__ == '__main__':
    funcB=login(funcB)
    funcB('alex')

運行結(jié)果:

do something
my name is alex

兩種方式運行結(jié)果一樣,為了方便爬凑,一般就使用到了裝飾器@func這種寫法徙缴,調(diào)用的時候直接執(zhí)行原函數(shù)即可

2、帶參數(shù)的裝飾器

def with_param(age):
    def funA(func):
        def wrapper(*args,**kwargs):
            if len(*args):
                return func(*args, **kwargs)
            print('你的token是空的嘁信,請重新登錄')
        return wrapper
    return funA


@with_param(18)
def home(token):
    print('歡迎來到home于样,my token is {}'.format(token))

@with_param(16)
def index(token):
    print('歡迎來到首頁潘靖,my token is {}'.format(token))

if __name__ == '__main__':
    home('agkdgaks')
    home('')
    index('dakgdjgahdfjya')
    index('')

運行結(jié)果:

歡迎來到home穿剖,my token is agkdgaks
你的token是空的,請重新登錄
歡迎來到首頁卦溢,my token is dakgdjgahdfjya
你的token是空的单寂,請重新登錄
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誓军,一起剝皮案震驚了整個濱河市昵时,隨后出現(xiàn)的幾起案子椒丧,更是在濱河造成了極大的恐慌,老刑警劉巖壶熏,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件句柠,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機溯职,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門精盅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谜酒,你說我怎么就攤上這事叹俏。” “怎么了僻族?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵粘驰,是天一觀的道長。 經(jīng)常有香客問我述么,道長蝌数,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任度秘,我火速辦了婚禮顶伞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枝哄。我一直安慰自己阻荒,他們只是感情好侨赡,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布粱侣。 她就那樣靜靜地躺著,像睡著了一般油猫。 火紅的嫁衣襯著肌膚如雪柠偶。 梳的紋絲不亂的頭發(fā)上情妖,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天毡证,我揣著相機與錄音料睛,去河邊找鬼。 笑死屎勘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的概漱。 我是一名探鬼主播苔货,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夜惭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了产喉?” 一聲冷哼從身側(cè)響起敢会,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸥昏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后障涯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年粘我,在試婚紗的時候發(fā)現(xiàn)自己被綠了痹换。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柔纵,死狀恐怖搁料,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郭计,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站庐杨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灵份。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一弦聂、第九天 我趴在偏房一處隱蔽的房頂上張望氛什。 院中可真熱鬧,春花似錦捺檬、人聲如沸贸铜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饺饭。三九已至,卻和暖如春鹊杖,著一層夾襖步出監(jiān)牢的瞬間扛芽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工登下, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缰贝。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓剩晴,卻偏偏與公主長得像侵状,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绽左,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容