请实现功能 : 在不改变装饰器的情况下,给装饰器的执行加上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‘)
解析
