装饰器

Posted alantammm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

第一个函数,作用是返回所有参数

def func1(*args):
    return (args)
print(func1(2,3,4))
#输出的是(2, 3, 4),return多个值返回的是个元祖

假如需要加上一个功能,不仅返回所有参数,还要返回所有参数的和(假设所有参数是数字)

#加个功能 算出所有参数的和
def deco_demo(f):
    def wrapper(*args):
        f(*args)
        j=0
        for i in args:
            j+=i
        return f(*args),(所有的数字的和为,j)
    return wrapper

@deco_demo
def func1(*args):
    return (args)
        
print(func1(2,3,4))
#输出为:((2, 3, 4), (‘所有的数字的和为‘, 9))

假如还要加入一个功能,计算所有参数的乘积(假设所有参数是数字)

#加个功能 算出所有参数的和
def deco_demo(f):
    def wrapper(*args):
        f(*args)
        j=0
        for i in args:
            j+=i
        return f(*args),(所有的数字的和为,j)
    return wrapper

#加个功能 算出所有参数的乘积
def deco_demo2(f):
    def wrapper(*args):
        f(*args)
        j=1
        for i in args:
            j*=i
        return f(*args),(所有的数字的积为,j)
    return wrapper
@deco_demo2
@deco_demo
def func1(*args):
    return (args)        
print(func1(2,3,4))
#输出:(((2, 3, 4), (‘所有的数字的和为‘, 9)), (‘所有的数字的积为‘, 24))

装饰器调用顺序

装饰器是可以叠加使用的,那么使用装饰器以后代码是啥顺序呢?

对于Python中的”@”语法糖,装饰器的调用顺序与使用 @ 语法糖声明的顺序相反。

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码