详解python中@的用法
python中@的用法
@是一个装饰器,针对函数,起调用传参的作用。
有修饰和被修饰的区别,‘@function'作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义)。
代码1
deffunA(desA): print("It'sfunA") deffunB(desB): print("It'sfunB") @funA deffunC(): print("It'sfunC")
结果1
It'sfunA
分析1
@funA修饰函数定义deffunC(),将funC()赋值给funA()的形参。
执行的时候由上而下,先定义funA、funB,然后运行funA(funC())。
此时desA=funC(),然后funA()输出‘It'sfunA'。
代码2
deffunA(desA): print("It'sfunA") deffunB(desB): print("It'sfunB") @funB @funA deffunC(): print("It'sfunC")
结果2
It'sfunA
It'sfunB
分析2
@funB修饰装饰器@funA,@funA修饰函数定义deffunC(),将funC()赋值给funA()的形参,再将funA(funC())赋值给funB()。
执行的时候由上而下,先定义funA、funB,然后运行funB(funA(funC()))。
此时desA=funC(),然后funA()输出‘It'sfunA';desB=funA(funC()),然后funB()输出‘It'sfunB'。
代码3
deffunA(desA): print("It'sfunA") print('---') print(desA) desA() print('---') deffunB(desB): print("It'sfunB") @funB @funA deffunC(): print("It'sfunC")
结果3
It'sfunA
It'sfunC
It'sfunB
分析3
同上,为了更直观地看参数传递,打印desA,其传的是funC()的地址,即desA现在为函数desA()。
执行desA()即执行funC(),desA=desA()=funC()。
代码4
deffunA(desA): print("It'sfunA") deffunB(desB): print("It'sfunB") print('---') print(desB) @funB @funA deffunC(): print("It'sfunC")
结果4
It'sfunA
It'sfunB
None
分析4
上面将funC()作为参数传给funA,那么funA(funC())怎么传给funB()呢?打印desB,发现并没有参数传递。
是否可以理解为当‘装饰器'修饰‘装饰器'时,仅是调用函数。
以上所述是小编给大家介绍的python中@的用法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!