装饰器: 装饰器的本质也是一个函数,用于装饰其他函数,在不修改被装饰函数的源码和调用方式的情况下为其新增附加功能。
简单无参装饰器样例:
#定义装饰器 def logger(func): def wrapper(*args,**kwargs): print(" start.....") return func(*args,**kwargs) print(" end....") return wapper #使用装饰器 @logger def run1(): print("run1") @logger def run2(arg) print("run2:%s" %arg) return "finished" if __name__ == "__main__": run1() run2("hello")
待参数的装饰器样例:
#定义鉴权装饰器 def auth(auth_type): #带参装饰器需要多一层函数来接收参数。 def outer_wrapper(func): def wrapper(*args,**kwargs): auth_result=False if auth_type == "basic": #调用basic鉴权 auth_result = basic_auth() elif auth_type == "ldap": #调用ldap鉴权 auth_result = ladp_auth() else: #非法的类型 if not auth_result: return {"msg":"auth failed","result":"failed"} else: return func(*args,**kwargs) #使用装饰器 @auth(auth_type="ldap") def access_web() #业务代码 @auth(auth_type="basic") def access_data() #业务代码