import functools def log(func): @functools.wraps(func) def wrp(*args, **kw): print('begin call', func.__name__) return func(*args, **kw) print('end call', func.__name__) return wrp @log def now(): print('2017/01/29') now()
import functools def log(arg): if isinstance(arg, str): def dec(func): @functools.wraps(func) def wrp(*args, **kw): print('%s %s():' % (arg, func.__name__)) return func(*args, **kw) return wrp return dec else: @functools.wraps(arg) def wrp(*args, **kw): print('call %s():' % arg.__name__) return arg(*args, **kw) return wrp @log def whoru(): print('i am who i am') whoru() @log('EXEC') def whoru(): print('i am who i am') whoru()
第一题这个在begin call 后使用return 语句就结束了程序,不会往下执行了,所以后面的end call日志是没法打印出来的
被廖老师的范例误导了,思考了和尝试了好久“如何在return以后的情况下接着输出 end call”。后来发现把return func中的return去掉就可以了。。。
Sign in to make a reply
4Neutrino