python 裝飾器簡(jiǎn)單使用

首先裝飾器寫法

“@ + 函數(shù)名”在執(zhí)行函數(shù)上方

python函數(shù)中的參數(shù)args和*kwargs的含義和用法

在python語(yǔ)言寫成的模塊中的函數(shù)里,常??梢钥吹胶瘮?shù)的參數(shù)表列里面有這兩個(gè)參數(shù),形如:

def some_function(*args, **kwargs):

首先,解釋星號(hào)的作用,一個(gè)星號(hào)*的作用是將tuple或者list中的元素進(jìn)行unpack,分開傳入,作為多個(gè)參數(shù);兩個(gè)星號(hào)**的作用是把dict類型的數(shù)據(jù)作為參數(shù)傳入。

裝飾器具體使用

函數(shù)process1

def process1(**kwargs):
    print(kwargs)
    a = kwargs['a']
    b = kwargs['b']
    print("a+b={}".format(a+b))

執(zhí)行結(jié)果:

process1(a=1,b=3)
結(jié)果1

函數(shù)set_a

def set_a(f):
    def wrapper(**kwargs):
        key = kwargs['key']
        print('start')
        print(kwargs)
        if key == 1:
            f(ccc=123,**kwargs)
        else:
            return False
        print('end')
    return wrapper

在process1上添加set_a裝飾器

def set_a(f):
    def wrapper(**kwargs):
        key = kwargs['key']
        print('start')
        print(kwargs)
        if key == 1:
            f(ccc=123,**kwargs)
        else:
            return False
        print('end')
    return wrapper

@set_a
def process1(**kwargs):
    print(kwargs)
    a = kwargs['a']
    b = kwargs['b']
    print("a+b={}".format(a+b))

process1(a=1,b=3,key=1)

執(zhí)行

process1(a=1,b=3,key=1)

參數(shù)key是裝飾器set_a中需要用到,得到結(jié)果如下,通過(guò)裝飾器set_a多傳入了一個(gè)參數(shù)ccc=123


圖片.png

在process1上再添加set_b裝飾器


def set_a(f):
    def wrapper(**kwargs):
        key = kwargs['key']
        print('start')
        print(kwargs)
        if key == 1:
            f(ccc=123,**kwargs)
        else:
            return False
        print('end')
    return wrapper

def set_b(f):
    def wrapper(**kwargs):
        print(kwargs)
        print('start2')
        f(**kwargs,dd=2)
        print('end2')
    return wrapper

@set_a
@set_b
def process1(**kwargs):
    print(kwargs)
    a = kwargs['a']
    b = kwargs['b']
    print("a+b={}".format(a+b))

process1(a=1,b=3,key=1)

得到結(jié)果如下,通過(guò)裝飾器set_a多傳入了一個(gè)參數(shù)ccc=123,所有參數(shù)會(huì)傳入set_b函數(shù)內(nèi),然后又多傳入一個(gè)參數(shù)dd=2


圖片.png
通過(guò)這個(gè)例子,得出結(jié)論:裝飾器可以在函數(shù)執(zhí)行前和執(zhí)行后做些新的動(dòng)作,并且裝飾器可以多個(gè)一起使用順序是由上到下參數(shù)可以傳遞。
最后編輯于
?著作權(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)容

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