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
    
         
    有参装饰器模板
  • 相关阅读:
    系统测试的策略
    POJ1611(并查集)
    POJ2752(KMP)
    POJ3176(DP)
    HDU2579(BFS)
    HDOJ1175(BFS)
    HDOJ1242(BFS)
    HDOJ1180(BFS)
    HDOJ1372(BFS)
    HDOJ2717(BFS)
  • 原文地址:https://www.cnblogs.com/cmd61/p/11173751.html
Copyright © 2011-2022 走看看