zoukankan      html  css  js  c++  java
  • 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')
     
  • 相关阅读:
    java获取指定日期的前一天和后一天
    Swagger注解-@ApiModel 和 @ApiModelProperty
    Timer中schedule()的用法
    Spring Boot 增加jar包
    报Result Maps collection does not contain value for java.lang.Long错误解决方法
    服务注册组件eureka
    浅谈redission以及Redis分布式锁探索入门
    用Redis实现分布式锁以及redission使用
    JVM逃逸分析对性能的影响
    【HTML打印】HTML直接调用window下的打印机并执行打印任务(简单打印任务生成)
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10070576.html
Copyright © 2011-2022 走看看