import functools
def log(arg):
if isinstance(arg, str):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print(arg)
print(‘begin call’)
fn = func(*args, **kw)
print(‘end call’)
return fn
return wrapper
return decorator
else:
@functools.wraps(arg)
def wrapper(*args, **kw):
print(‘begin call’)
fn = arg(*args, **kw)
print(‘end call’)
return fn
return wrapper
@log
def f1():
print(‘f1’)
f1()
@log(‘execute’)
def f2():
print(‘f2’)
f2()