• 装饰器之自我理解


    import time
    def timer(func):
        def inner(*args,**kwargs):
            start = time.time()
            re = func(*args,**kwargs)
            print(time.time() - start)
            return re
        return inner
    
    @timer   #==> func1 = timer(func1)
    def func1(a,b):
        print('in func1')
    
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
    
    func1('aaaaaa','bbbbbb')     # 带参装饰器理解过程。 --> func1 = timmer(func1)  ---> func1("aaaaaa',"bbbbbb")
    print(func2('aaaaaa'))
    
    
    
    def auth(driver='file'):
        def auth2(func):
            def wrapper(*args,**kwargs):
                name=input("user: ")
                pwd=input("pwd: ")
    
                if driver == 'file':
                    if name == 'egon' and pwd == '123':
                        print('login successful')
                        res=func(*args,**kwargs)
                        return res
                elif driver == 'ldap':
                    print('ldap')
            return wrapper
        return auth2
    
    @auth(driver='file')               # 这里在用@注解的时候,auth(driver='file') ,加了括号,就是执行的意思,并传了参娄,已经反回了 auth2函数,相于foo函数,被 auth2直接装饰了
    def foo(name):
        print(name)
    
    foo('egon')              # 因此调用时----> foo=auth2(foo) ----> foo('egon')



    def auth(driver='file'):
    def auth2(func):
    def wrapper(*args,**kwargs):
    name=input("user: ")
    pwd=input("pwd: ")

    if driver == 'file':
    if name == 'egon' and pwd == '123':
    print('login successful')
    res=func(*args,**kwargs)
    return res
    elif driver == 'ldap':
    print('ldap')
    return wrapper
    return auth2

    @auth(driver='ldap') # 这里改变传参 driver='ldap' # 这里在用@注解的时候,auth(driver='file') ,加了括号,就是执行的意思,并传了参娄,已经反回了 auth2函数,相于foo函数,被 auth2直接装饰了
    def foo(name):
    print(name)

    foo('egon') # 因此调用时----> foo=auth2(foo) ----> foo('egon') (如果装饰的不带参的函数,就是foo() )
     
  • 相关阅读:
    Path Sum
    【转】Python的神奇方法指南
    【转】浅析Python中的struct模块
    【转】Python之系统交互(subprocess)
    【转】Win10下python3和python2多版本同时安装并解决pip共存问题
    【转】python包导入细节
    【转】python 历险记(四)— python 中常用的 json 操作
    【转】python模块导入细节
    【转】python 内置函数总结(大部分)
    【转】MySQL-Select语句高级应用
  • 原文地址:https://www.cnblogs.com/chris-jia/p/9494173.html
Copyright © 2020-2023  润新知