请实现功能 : 在不改变装饰器的情况下,给装饰器的执行加上log信息。(5分)
def log(wrap):
…
@log
def wrapper(func):
def inner(*args,**kwargs):
print(‘before func‘)
ret = func(*args,**kwargs)
print(‘after func‘)
return ret
return inner
@wrapper
def wahaha(name):
print(‘%s in wahaha‘%name)
wahaha(‘alex‘)
答:
def log_inner(*args,**kwargs): inn = wrap(*args,**kwargs) def inner(*args,**kwargs): ret = inn(*args,**kwargs) print(wrap.__name__,‘is running‘) return ret return inner return log_inner @log def wrapper(func): def inner(*args,**kwargs): print(‘before func‘) ret = func(*args,**kwargs) print(‘after func‘) return ret return inner @wrapper def wahaha(name): print(‘%s in wahaha‘%name) wahaha(‘alex‘)
解析