装饰器装饰没有返回值函数:
装饰器装饰有返回值函数:
如图可以看到,无论被装饰的函数有无返回值,其结果都无返回值,原因其实很简单,因为inner()函数根本就没有返回值。为了实现有返回值的函数被装饰之后仍然有返回值,需要inner函数与被装饰函数的返回值保持一致。
可以看到,有返回值的函数被装饰之后依然有返回值,没有返回值的函数被装饰之后则没有返回值,符合我们想要的结果。
双重语法糖(带参数)
也就是说最外层的语法糖先执行。
装饰器和闭包的关系:
装饰器是用闭包来实现的。
装饰器其实是闭包的特例, 其外部函数传的参数是函数名而已。
详细分析参考博文:https://blog.csdn.net/qq_42156420/article/details/81169554