什么是裝飾器疗锐?
裝飾器是一個特殊的函數(shù)液南,可以理解為一種特殊的閉包。
詳見https://blog.csdn.net/ljt735029684/article/details/80703649
如何理解觉至?
閉包:函數(shù)內(nèi)嵌套函數(shù)
將目標(biāo)函數(shù)當(dāng)作參數(shù)傳入閉包中窜护,在不修改目標(biāo)函數(shù)的情況下,可以在閉包中進(jìn)行函數(shù)功能的增加买羞。
有什么用?
比如你做了一個功能雹食,每個部門都可以用畜普,但是后來某個部門和你吵架了,你不想讓他用群叶,就在原函數(shù)的基礎(chǔ)上加一個裝飾器吃挑,增加權(quán)限驗(yàn)證的功能,沒有密碼無法使用街立。代碼如下:
# -*- coding: utf-8 -*-
def get_fuc(fuc):
def fuc_1():
x = input("請輸入密碼:")#此處添加權(quán)限驗(yàn)證
if x == "123456":
fuc()#密碼正確才能調(diào)用該函數(shù)
else:
print("密碼錯誤")#f否則提示密碼錯誤
return fuc_1
@get_fuc //等同于test = get_fuc(test)#這是一個語法糖舶衬,所以裝飾器里不能返回fuc_1()
def test():
print("歡迎回來")
裝飾器傳參
本質(zhì):在最外層構(gòu)建一個方法,將原來的裝飾器函數(shù)進(jìn)行返回
# -*- coding: utf-8 -*-
def get_fucc(pwd):
def get_fuc(fuc):
def fuc_1():
x = input("請輸入密碼:")#此處添加權(quán)限驗(yàn)證
if x == pwd:
fuc()#密碼正確才能調(diào)用該函數(shù)
else:
print("密碼錯誤,登錄失敗")#f否則提示密碼錯誤
return fuc_1
return get_fuc
@get_fucc(pwd = "111111") #等同于test = get_fuc(test)#這是一個語法糖赎离,所以裝飾器里不能返回fuc_1()
def test():
print("歡迎回來")