1 什么是装饰器
在不改变原有函数的基础上,给函数增加一些新的功能。
便于开发和代码复用。
-扩展功能
-扩展权限认证
-日志
2 模板
def A(func):
def B(*args, **kwargs):
print('有火眼金睛了')
return C(*args, **kwargs)
return B
def C():
print('吃桃子')
new_C = A(C) #放入原料,原来的弱小的孙悟空,生成炼丹方案给 新_孙悟空 ,这里也可以把炼丹方案给 原来的‘孙悟空’,为了方便理解,给了新的孙悟空
new_C() # 执行炼丹程序,新的孙悟空出世
3 语法糖@
用简短的方式生成一个被装饰的函数。
def A(func):
def B(*args, **kwargs):
print('有火眼金睛了')
return C(*args, **kwargs)
return B
@A
def C():
print('吃桃子')
C()
4 带参数的装饰器
三层,最外层传入参数
def use_logging(level):
def decorator(func):
def wrapper(*args, **kwargs):
if level == "warn":
logging.warn("%s is running" % func.__name__)
elif level == "info":
logging.info("%s is running" % func.__name__)
return func(*args)
return wrapper
return decorator
@use_logging(level="warn")
def foo(name='foo'):
print("i am %s" % name)
foo()