第四次记录!!!Python装饰器

装饰器并不是什么新功能,而是一种模式,通过高阶函数和嵌套函数来完成的。

当要对一个函数添加新内容时要求1、不能修改到原函数代码

               2、不能修改调用此函数的调用方式

优点:当想对多个网站添加功能时,可以通过装饰器来添加功能,同而不修改到源代码。

缺点:有时函数嵌套太多对阅读者理解加大了难度。

今天完成的代码:

 

import  time
user,passwd = 'alex','abc123'
def auth(auth_type):
    print('auth func:',auth_type)
    def outer_wrapper(func):
        def wrapper(*args, **kwargs):
            print("wrapper func args:", *args, **kwargs)
            if auth_type == "local":
                username = input("Username:").strip()
                password = input("Password:").strip()
                if user == username and passwd == password:
                    print("登录成功")
                    return func(*args, **kwargs)    # from home
                else:
                    exit("登陆失败")
            elif auth_type == "ldap":
                print("搞毛线,不会。。。。")
        return wrapper
    return outer_wrapper

def index():
    print("welcome to index page")

@auth(auth_type="local") # home = wrapper()
def home():
    print("welcome to home page")
    return "from home"

@auth(auth_type="ldap")
def bbs():
    print("welcome to bbs page")

print(home())
bbs()

  

猜你喜欢

转载自www.cnblogs.com/lgj45/p/9912536.html