Python_@修饰器(装饰器)的理解

python学习网 2018-04-12 18:21:02

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能.

装饰器的作用就是为已经存在的对象添加额外的功能。

def funA(fun):
    print (fun())

def funB():
    print ('B')
    return 1

funA(funB)
-----------------------------
>>>
B
1

可以看出,这个程序的运行过程为:

1.执行函数funB,输出了一个B,另外返回了一个值:1

2.执行函数funA,把funB返回的值1给输出了出来

而修饰器的作用:

def funA(fun):  #函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用,而funB是有返回值的,所以结果输出了返回值1.(个人理解)
    print (fun())

@funA
def funB():
    print ('B')
    return 1
----------------------
>>>
B
1

作用相当于 funA(funB),不过只能放在一个函数或者类定义之前

需要注意的是,如果funB在funA里没用被调用的话,那funB是不会被执行的,如:

def funA(fun):
    print ('funA')

@funA
def funB():
    print ('B')
    return 1
---------------------------
>>>
funA

可以看出,只执行了funA而funB没有被执行,因为print('B')并没有被打印出来.

ps:如果funA不加参数的话,比如直接 def funA(): 这样定义,他是会报错的:

@funA
TypeError: funA() takes 0 positional arguments but 1 was given

大意是@funA中的funA必须要给他提供一个参数,但是你给了0个.

阅读(749) 评论(0)