装饰器: 装饰器的本质也是一个函数,用于装饰其他函数,在不修改被装饰函数的源码和调用方式的情况下为其新增附加功能。
简单无参装饰器样例:
#定义装饰器
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()
#业务代码