zoukankan      html  css  js  c++  java
  • 装饰器之进阶

    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
    
         
    有参装饰器模板
  • 相关阅读:
    py基础之模块与包
    py装饰器,生成器,迭代器
    py函数式编程
    py基础之列表生成式
    算法基础之递归算法
    Py基础之函数
    py基础之无序列表
    py基础之数据类型及基本语法
    jsp报错问题汇总
    mysql问题汇总
  • 原文地址:https://www.cnblogs.com/cmd61/p/11173751.html
Copyright © 2011-2022 走看看