装饰器设计模式
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
在Python中,使用@语法糖修饰一个函数,把@deco放到func()函数的定义处,相当于执行了语句:
func = deco(func)
不带参数的装饰器
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print(time.strftime('%Y-%m-%d',time.localtime(time.time())))
输出结果:
call now():
2017-06-19
带参数的装饰器
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s call %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log(‘Alan’)
def now():
print(time.strftime(‘%Y-%m-%d’,time.localtime(time.time())))
输出结果:
Alan call now():
2017-06-19