装饰器

装饰器装饰没有返回值函数:

装饰器装饰有返回值函数:

如图可以看到,无论被装饰的函数有无返回值,其结果都无返回值,原因其实很简单,因为inner()函数根本就没有返回值。为了实现有返回值的函数被装饰之后仍然有返回值,需要inner函数与被装饰函数的返回值保持一致。

可以看到,有返回值的函数被装饰之后依然有返回值,没有返回值的函数被装饰之后则没有返回值,符合我们想要的结果。

双重语法糖(带参数)

也就是说最外层的语法糖先执行。

装饰器和闭包的关系:

 装饰器是用闭包来实现的。

装饰器其实是闭包的特例, 其外部函数传的参数是函数名而已。

详细分析参考博文:https://blog.csdn.net/qq_42156420/article/details/81169554

原文地址:https://www.cnblogs.com/girl1314/p/10481555.html