当前位置: 移动技术网 > IT编程>脚本编程>Python > 详解python中@的用法

详解python中@的用法

2019年06月11日  | 移动技术网IT编程  | 我要评论

重庆文理学院教务网,德语在线翻译,灵寿新闻

python中@的用法

@是一个装饰器,针对函数,起调用传参的作用。
有修饰和被修饰的区别,作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义)。

代码1

def funa(desa):
 print("it's funa")

def funb(desb):
 print("it's funb")

@funa
def func():
 print("it's func")

结果1

it's funa

分析1

@funa 修饰函数定义def func(),将func()赋值给funa()的形参。
执行的时候由上而下,先定义funa、funb,然后运行funa(func())。
此时desa=func(),然后funa()输出‘it's funa'。

代码2

def funa(desa):
 print("it's funa")

def funb(desb):
 print("it's funb")

@funb
@funa
def func():
 print("it's func")

结果2

it's funa
it's funb

分析2

@funb 修饰装饰器@funa,@funa 修饰函数定义def func(),将func()赋值给funa()的形参,再将funa(func())赋值给funb()。
执行的时候由上而下,先定义funa、funb,然后运行funb(funa(func()))。
此时desa=func(),然后funa()输出‘it's funa';desb=funa(func()),然后funb()输出‘it's funb'。

代码3

def funa(desa):
 print("it's funa")

 print('---')
 print(desa)
 desa()
 print('---')

def funb(desb):
 print("it's funb")

@funb
@funa
def func():
 print("it's func")

结果3

it's funa
< function func at 0x000001a5ff763c80 >
it's func
it's funb

分析3

同上,为了更直观地看参数传递,打印desa,其传的是func()的地址,即desa现在为函数desa()。
执行desa()即执行func(),desa=desa()=func()。

代码4

def funa(desa):
 print("it's funa")

def funb(desb):
 print("it's funb")
 print('---')
 print(desb)

@funb
@funa
def func():
 print("it's func")

结果4

it's funa
it's funb
none

分析4

上面将func()作为参数传给funa,那么funa(func())怎么传给funb()呢?打印desb,发现并没有参数传递。
是否可以理解为当‘装饰器' 修饰 ‘装饰器'时,仅是调用函数。

以上所述是小编给大家介绍的python中@的用法详解整合,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网