装饰器

装饰器就是闭包

使用装饰器需要在定义函数时@装饰器函数名。相当于执行func=wrapper(func)=inner

但是如果调用func.__name__ 查看的是Inner的函数名,同样查看函数文档也为inner的文档。

可以定义inner.__name__=func.__name__.

当然python内置的模块给出了wraps方法.

带参数的装饰器用两个闭包 @外部函数名加括号(参数)相当于执行这个函数,返回要用wrapper 意思还是@wrapper 但此时外部函数的参数已经传到inner里了

 

多个装饰器修饰一个函数的执行顺序及原理

 

比较直观的执行顺序,像是套娃从最外层执行,也就是最顶的wrapper2,但在原理上是先执行的wrapper1

 

原理是wrapper1将它下边离它最近的函数f传进,f=wrapper1(f)=inner1

而wrpapper2又将离它最近的inner1作为参数传进来 f=wrapper2(inner1)=inner2

所以f函数在调用时是套娃结构的顺序。

 

posted @ 2018-11-29 11:07  曜有丨光  阅读(68)  评论(0编辑  收藏  举报