装饰器之进阶

1.模板

无参装饰器的模板

2.原理

3.语法糖@

 

如果有多个装饰器,我们直接书写比较麻烦,而且重复率比较高。为了解决这个问题,Python给我们提供了一个方法,就是语法糖@。
装饰器
@outer
下面是被装饰的对象
这个@就相当于:
index = outer(index)
index()
View Code

 

4.wraps

产生的原因:装饰器装饰的并不能完美,当人们查看函数解释时,很容易发现他是被装饰的。为了解决这个问题,wraps应运而生,所以wraps又被称之为装饰器修复技术。
from functools import wraps
def outter(func):
    @wraps(func)  # 装饰器修复技术
    def inner(*args,**kwargs):
        """
        我是inner函数
        :param args:
        :param kwargs:
        :return:
        """
        print('执行被装饰函数之前 你可以执行的操作')
        res = func(*args,**kwargs)
        print('执行被装饰函数之后 你可以执行的操作')
        return res
    return inner

@outter  # index = outter(最原始的index内存地址)
def index():
    """
    这是index函数
    :return:
    """
    pass


print(index)
print(help(index))  # 查看函数的注释
print(index.__name__)  # 查看函数名字符串形式
index()
示例

5.装饰器的加载顺序和执行顺序

多层装饰器的加载顺序:从下往上简介简介对你来说
多层装饰器的执行顺序:从上往下

6.多层参数器和有参装饰器

from functools import wraps


def warppen(*args, **kwargs):
    def outer(func):
        @wraps(func)
        def inner(*args, **kwargs):
            print('func1')
            res = func(*args, **kwargs)
            return res

        return inner

    return outer

     
有参装饰器模板
原文地址:https://www.cnblogs.com/cmd61/p/11173751.html