python装饰器decorator介绍
一、装饰器decorator
decorator设计模式允许动态地对现有的对象或函数包装以至于修改现有的职责和行为,简单地讲用来动态地扩展现有的功能。其实也就是其他语言中的AOP的概念,将对象或函数的真正功能也其他辅助的功能的分离。
二、Python中的decorator
python中的decorator通常为输入一个函数,经过装饰后返回另一个函数。 比较常用的功能一般使用decorator来实现,例如python自带的staticmethod和classmethod。
装饰器有两种形式:
@A deffoo(): pass
相当于:
deffoo(): pass foo=A(foo)
第二种为带参数的:
@A(arg) deffoo(): pass
则相当于:
deffoo(): pass foo=A(arg)(foo)
可以看出第一种的装饰器是个返回函数的函数,第二种的装饰器是个返回函数的函数的函数。
python中的decorator可以多个同时使用,如下:
@A @B @C deff():pass #itissameasbelow deff():pass f=A(B(C(f)))
三、Python中常用的decorator实例
decorator通常用来在执行前进行权限认证,日志记录,甚至修改传入参数,或者在执行后对返回结果进行预处理,甚至可以截断函数的执行等等。
实例1:
fromfunctoolsimportwraps deflogged(func): @wraps(func) defwith_logging(*args,**kwargs): print(func.__name__()+"wascalled") returnfunc(*args,**kwargs) returnwith_logging
@logged deff(x): """doessomemath""" returnx+x*x
print(f.__name__) #prints'f' print(f.__doc__) #prints'doessomemath'