python 装饰器简单使用

首先装饰器写法

“@ + 函数名”在执行函数上方

python函数中的参数args和*kwargs的含义和用法

在python语言写成的模块中的函数里,常常可以看到函数的参数表列里面有这两个参数,形如:

def some_function(*args, **kwargs):

首先,解释星号的作用,一个星号*的作用是将tuple或者list中的元素进行unpack,分开传入,作为多个参数;两个星号**的作用是把dict类型的数据作为参数传入。

装饰器具体使用

函数process1

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

执行结果:

process1(a=1,b=3)
结果1

函数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)

执行

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

参数key是装饰器set_a中需要用到,得到结果如下,通过装饰器set_a多传入了一个参数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)

得到结果如下,通过装饰器set_a多传入了一个参数ccc=123,所有参数会传入set_b函数内,然后又多传入一个参数dd=2


图片.png
通过这个例子,得出结论:装饰器可以在函数执行前和执行后做些新的动作,并且装饰器可以多个一起使用顺序是由上到下参数可以传递。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容