把变量名、函数名、以及方法名、类的名字统统都当做一个变量名来对待,只要有一个相同的,并且是谁最后定义的,接下来你用的时候用的就是最后一个
装饰器的作用:能在原来函数内部代码不修改的前提下,对它整体加功能,要么在前面加要么在后面加装饰器的实现过程
test1指向set_func,set_func里又指向了原来的test1(),接下来调用test1()时,原来的函数好像就不知道一样就添加了功能把原来一个函数的引用,当做实参传递到一个闭包的变量里去,接下来什么时候去调闭包里的函数时,什么时候就去调这个引用,这不就意味着调原函数,
最终的表现形式是,在你原来调函数不变的情况下,能对原函数的功能扩展对有参函数的装饰
原函数有多少个入参,装饰的函数里也要
装饰器在没有执行函数之前已经装饰le
是随着python解释器向下执行,只要遇到了"@"就执行
用同一个装饰器是可以对n个函数进行装饰
没装饰一个相当于创建一个闭包对不定长参数的函数,使用装饰器时,参数使用多值参数的解包和拆包
接收的时候以不定长参数接收,传递的时候拆包地传
对带有返回值的函数进行装饰多个装饰器对同一个函数装装饰的时候是从下往上装饰
执行的时候是从上往下执行h1tdhahatdh1类装饰器