搞不明白为什么里面返回r,外面返回fn,这个装饰器用在这里有啥好处,看着好乱。。。。
搞不明白为什么里面返回r,外面返回fn,这个装饰器用在这里有啥好处,看着好乱。。。。
搞不明白为什么里面返回r,外面返回fn,这个装饰器用在这里有啥好处,看着好乱。。。。
2019-03-17
装饰器的本质是闭包。
def outer(f):
def inner(x): #1
return f(x) #2
return inner #3
f = out(f)
f(x)
看上面这个函数,我先定义一个outer函数,这个函数的1,2,3行都做了些什么呢?首先1,2两行我定义另一个函数,但是先不执行,我先放在这,后面用的时候再执行。然后我把定义的这个inner函数返回去。接下来调用的时候,inner函数再执行。那inner函数都干什么事呢?执行f(x)函数并返回结果。
所以为什么定义了outer inner这俩函数,结果就是为了执行f(x)这个函数呢?费那么大劲干嘛?就是为了在1和2之间插入点其它东西,比如print点东西出来。这就是装饰器了。
举报