python @装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
在函数调用前后自动打印日志,但又不希望修改now()函数的定义
编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志。
再思考一下能否写出一个@log的decorator,使它既支持:
@log
def f():
pass
又支持:
@log('execute')
def f():
pass
__author__ = 'wxy' import functools def log(text=None): def decorator(func): # wrapper.__name__ = func.__name__ @functools.wraps(func) def wrapper(*args,**kw): if text: print "begin call",func.__name__,'input is ',text else: print "begin call",func.__name__ rs = func(*args,**kw) print 'end call' return rs return wrapper return decorator @log() def now(): print '2017-11-06 ' now() print now.__name__

浙公网安备 33010602011771号