• 装饰器


    装饰器:定义一个函数,为其他函数添加额外功能

    def index(x,y,z):
        print(x,y,z)
    def outter(func):
        def wrapper(*args,**kwargs):
            import time
            start = time.time()
            res = func(*args,**kwargs)
            end = time.time()
            return res
        return wrapper
    index = outter(index)
    index(1,2,3)
    

    开放封闭原则:拓展功能开放,修改源码封闭

    语法糖:@timmer

    def auth(func):
        def wrapper(*args,**kwargs):
            # 1、调用原函数
            # 2、为其增加新功能
            name=input('your name>>: ').strip()
            pwd=input('your password>>: ').strip()
            if name == 'egon' and pwd == '123':
                res=func(*args,**kwargs)
                return res
            else:
                print('账号密码错误')
        return wrapper
    
    
    
    @auth
    def index():
        print('from index')
    
    index()
    
    @func
    把下面的函数名传入@后面的函数名加括号的里面的参数,然后将返回值赋值给下面的函数名
    
    wrapper.__name__ = func.__name__
    wrapper.__doc__ = func.__doc__
    
    from functools import wraps
    
    在wrapper定义上再加装饰器
    @wraps(func)
    
    wapper改了参数,那index调用的时候也得变,那就不符合要求了
    
    有参装饰器:
    
    from functools import wraps
    
    def auth(x1,y1,z1):
        def outter(func):
            @wraps(func)
            def wrapper(*args,**kwargs):
                import time
                start = time.time()
                res = func(*args,**kwargs)
                end = time.time()
                print(x1,y1,z1)
                return res
            return wrapper
        return outter
    
    @auth(0,0,0)
    def index(x,y,z):
        print(x,y,z)
    
    index(1,2,3)
    print(index.__name__)
    

    装饰器调用:
    加载顺序:自下而上
    最终index就是最外层的wrapper

    执行顺序:从外层到内层

  • 相关阅读:
    week02 线性表
    week01绪论
    第一周作业
    C语言第二次实验作业
    C语言实验报告
    博客作业06--图
    博客作业05--查找
    博客作业04--树
    博客作业03--栈和队列
    博客作业2---线性表
  • 原文地址:https://www.cnblogs.com/pythonwl/p/12553169.html
Copyright © 2020-2023  润新知