为什么我们要使用有两层函数的装饰符,而我们可以只使用一层函数?
例如
def time_func(func):
print('Starting')
t0=time()
out = func()
print('Ending',time()-t0
return out
现在time_func()可以接受任何一个函数 并像装饰器一样完成它的工作。我错过了什么?
装饰者的定义是接受一个函数,然后返回一个新的函数来替换被装饰的函数。你的函数并没有这样做,你的函数只是接受一个函数并调用它,这不是一个装饰器,这只是一个函数接受回调的行为。
至于为什么要用装饰器,就是为了给函数增加功能,而不需要把这些代码写进函数本身,既让被装饰的函数更简单,又让装饰行为可以重用。唯一的另一种选择就是让调用者承担起包裹每个函数调用的责任,但这显然也是不太明智的。