• Python记录11:叠加多个装饰器+有参装饰器



    # import time
    #
    # def timmer(func): #func=最原始的index的内存地址
    # def wrapper(*args,**kwargs):
    # start=time.time()
    # res=func(*args,**kwargs)
    # stop=time.time()
    # print(stop - start)
    # return res
    # return wrapper
    #
    # @timmer #index=timmer(index) #index=wrapper的内存地址
    # def index():
    # print('index function')
    # time.sleep(1)
    #
    # index(1,2,3,) #wrapper(1,2,3)





    # 叠加多个装饰器
    #1. 加载顺序: 自下而上
    #2. 执行顺序


    # import time
    #
    # def deco1(func1): #func1=wrapper2的内存地址
    # # print('deco1运行')
    # def wrapper1(*args,**kwargs):
    # print('wrapper1')
    # res=func1(*args,**kwargs)
    # return res
    # return wrapper1
    #
    # def deco2(func2): #func2=wrapper3的内存地址
    # # print('deco2运行')
    # def wrapper2(*args,**kwargs):
    # print('wrapper2')
    # res=func2(*args,**kwargs)
    # return res
    # return wrapper2
    #
    # def deco3(func3): #func3=最原始那个index的内存地址
    # # print('deco3运行')
    # def wrapper3(*args,**kwargs):
    # print('wrapper3')
    # res=func3(*args,**kwargs)
    # return res
    # return wrapper3
    #
    #
    # # index=wrapper1
    # @deco1 # index=deco1(wrapper2)
    # @deco2 # wrapper2=deco2(wrapper3)
    # @deco3 # wrapper3=deco3(最原始那个index的内存地址)
    # def index():
    # print('index function')
    # time.sleep(1)
    #
    # index() #wrapper1()


    import time
    current_user={'username':None}

    def timmer(func): #func=最原始的index的内存地址
    def wrapper1(*args,**kwargs):
    start=time.time()
    res=func(*args,**kwargs) #================>wrapper2
    stop=time.time()
    print(stop - start)
    return res
    return wrapper1

    def auth(func):
    def wrapper2(*args,**kwargs):
    if current_user['username']:
    res = func(*args, **kwargs)
    return res
    name=input('username>>: ').strip()
    pwd=input('password>>: ').strip()
    if name == 'egon' and pwd == '123':
    current_user['username']=name
    res=func(*args,**kwargs)
    return res
    else:
    print('账号密码错误...')
    return wrapper2


    @timmer
    @auth
    def index():
    print('index function')
    time.sleep(1)


    index()




    import time
    current_user={'username':None}

    def outter(engine='file'):
    def auth(func):
    def wrapper2(*args,**kwargs):
    # if current_user['username']:
    # res = func(*args, **kwargs)
    # return res
    name=input('username>>: ').strip()
    pwd=input('password>>: ').strip()
    if engine == 'file':
    print('基于文件的认证')
    if name == 'egon' and pwd == '123':
    current_user['username']=name
    res=func(*args,**kwargs)
    return res
    else:
    print('账号密码错误...')
    elif engine == 'mysql':
    print('基于mysql的认证')
    elif engine == 'ldap':
    print('基于ldap的认证')
    else:
    print("不合法的认证源")
    return wrapper2
    return auth

    @outter(engine='file') # 账号密码是来自于文件 index=aaa.txt(index) #index=wrapper2
    def index():
    print('index function')
    time.sleep(1)

    @outter(engine='mysql') # 账号密码是来自于mysql # home=bbb(home) #home=wrapper2
    def home(name):
    print('home function',name)
    time.sleep(1)

    index() #wrapper2()
    home('egon') #wrapper2('egon')
     
  • 相关阅读:
    透明PNG格式图片兼容IE6浏览器
    CSS英文单词强制换行
    未能加载文件或程序集“Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。试图加载格式不正确的程序
    使用IIS 无法命中Application_Start中的断点问题
    win7 x64 后蓝牙u盘搜索不到其他设备
    使用Html.BeginForm<T>后客户端脚本验证出错的问题
    为什么使用sealed修饰符
    vs2010调试时发生监视显示表达式为false,但却进入了if块中
    MicrosoftMvcJQueryValidation.js 启用客户端验证,form无法提交
    Jquery 操作页面中iframe自动跟随窗口大小变化,而不出现滚动条,只在iframe内部出滚动条
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10070576.html
Copyright © 2020-2023  润新知