python 裝飾器簡單使用

首先裝飾器寫法

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

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

在python語言寫成的模塊中的函數(shù)里,常常可以看到函數(shù)的參數(shù)表列里面有這兩個參數(shù),形如:

def some_function(*args, **kwargs):

首先,解釋星號的作用,一個星號*的作用是將tuple或者list中的元素進行unpack,分開傳入,作為多個參數(shù);兩個星號**的作用是把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é)果如下,通過裝飾器set_a多傳入了一個參數(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é)果如下,通過裝飾器set_a多傳入了一個參數(shù)ccc=123,所有參數(shù)會傳入set_b函數(shù)內(nèi),然后又多傳入一個參數(shù)dd=2


圖片.png
通過這個例子,得出結(jié)論:裝飾器可以在函數(shù)執(zhí)行前和執(zhí)行后做些新的動作,并且裝飾器可以多個一起使用順序是由上到下參數(shù)可以傳遞。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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