楼主今天学习装饰器的时候发现,在python底层会把被装饰的函数地址换成装饰器里return回来的地址,那么你调用被装饰的函数时候其实是在调用装饰器return回来的地址所形成的闭包环节(如图1所示)。楼主想既然底层能把函数地址更换了,那么楼主是把函数地址换了又有何不可呢!(如图2)
运行结果(图3):
你以为这就结束了吗!!!不不不,我们再看看debug后台Variables的func(图4,图5)。
有没有发现我的fun“按道理”来说是一个变量接收了func的地址而已,没想到后台直接就把func的地址赋值给了“函数”fun,中途并没有产生一个新的fun变量。
再来一个实验,我们给fun赋值一个int值会发生什么?(图6)
图6里的fun的class直接从function变成int,从始至终没有出现过新的fun变量,仅仅把“函数”fun里的值改成了1.
结论:
你的变量最好不要和函数名重名哦,小心你的函数地址被覆盖哦。