练习一
请编写一个decorator,能在函数调用的前后打印出'begin call'
和'end call'
的日志。
这部分并不难,在wrapper中将函数的运行值赋值给一个变量,再返回该变量即可,如下:
import functools
def log(fn):
@fuctools.wraps(fn)
def wrapper(*args,**kw):
print ('begin call')
x=fn(*args,**kw)
print('begin call')
return x
return wrapper
练习二
再思考一下能否写出一个@log
的decorator,使它既支持:
@log
def f():
pass
又支持:
@log('execute')
def f():
pass
这个练习的关键点在于要使得log在有参数和无参数的情况下都有对应的执行,这一点在C++中是可以通过重载函数解决的,但是在python中还没接触到,所以没能想出来
参考答案如下:
def log(text):
def