python装饰器的实现原理

装饰器的作为是在原函数的基础上,对原函数增加一切功能。
但是只能在原函数整体之前,或者整体之后修改。无法再原函数内部修改。
在这里插入图片描述
实现原理如图,其中test1 = set_func(test1)
相当于改变了test1 变量的指向(从指向原test1函数) 改变为指向右侧的call_func()函数。
并且原来call_func()函数中 func 会指向原test1函数 .
这样就实现了不改变原函数内部代码结构的前提下,进行了增加新功能目的。

为了优化代码,我们将
test1 = set_func(test1) 由 @set_func关键字来替代。
这样就是装饰器就出现了。

在这里插入图片描述
当一个函数有多个装饰器时,程序运行前装饰的顺序是由下到上,
而程序的执行过程是由上至下。
结果如下图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_18883663/article/details/84343274