一、decorator的作用
装饰器本质上是一个Python函数,可以让其他函数在不做任何代码变动的前提下增加额外功能。
装饰器的返回值也是一个函数对象。python里函数也是对象。
它经常用于有切面需求(什么是切面需求?)的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。
装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
二、简单的装饰器
之前一篇很潦草的 python中的@
def use_logging(func): print "%s is running" % func.__name__ return func() @use_logging def fun_a(): print "hello, I'm func_a." fun_a #带括号()报错 fun_a() TypeError: 'NoneType' object is not callable
-----------
fun_a is running # 先执行use_logging
hello, I'm func_a.
def use_logging(func): def wrapper(*args, **kwargs): print "%s is running" % func.__name__ return func() return wrapper @use_logging def fun_a(): print "hello, I'm func_a." fun_a() ------- fun_a is running hello, I'm func_a.
三、带参数的装饰器
四、如何写出好的装饰器
------------
source:【1】如何理解python的装饰器