欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解python中@的用法

程序员文章站 2022-06-08 20:05:54
python中@的用法 @是一个装饰器,针对函数,起调用传参的作用。 有修饰和被修饰的区别,作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义...

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中@的用法详解整合,希望对大家有所帮助