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')
     
  • 相关阅读:
    Pyhon的json库常用方法
    常用的Python操作
    Leetcode: 1301.Number of Paths with Max Score
    redis 源码阅读杂记
    二分查找性能试验
    leetcode: 600. Non-negative Integers without Consecutive Ones
    Leetcode: 902. Numbers At Most N Given Digit Set
    leetcode:956. Tallest Billboard
    innodb 插入性能简单测试
    redis 源码阅读之 redis.c
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10070576.html
Copyright © 2011-2022 走看看