第一题
import functools def decorator(func): @functools.wraps(func) def wrapper(*args,**kw): print('begin call') result = func(*args,**kw) print('end call') return result return wrapper @decorator def prt(): print('ok, sir! ') prt()
第二题
import functools def log(text = None): def decorator(func): @functools.wraps(func) def wrapper(*args,**kw): if text == None: print('call %s():' % func.__name__) else: print('%s %s():'%(text,func.__name__)) result = func(*args,**kw) return result return wrapper return decorator @log() def prt(): print('ok, sir! ') prt()
同样不理解为什么@log后不加括号就会报错。初步猜测是因为之前的log是修饰函数能自动传输下面的函数作为参数,而这个函数log并非修饰函数时就需要加括号来执行该函数。先不管了以后再看吧。 还有一个也是楼下同学的问题,不清楚为什么有时候return func(args,*kw)能够执行func有时候却不能执行。
Sign in to make a reply
lostanother
第一题
第二题
同样不理解为什么@log后不加括号就会报错。初步猜测是因为之前的log是修饰函数能自动传输下面的函数作为参数,而这个函数log并非修饰函数时就需要加括号来执行该函数。先不管了以后再看吧。 还有一个也是楼下同学的问题,不清楚为什么有时候return func(args,*kw)能够执行func有时候却不能执行。