1.什么叫函数装饰器?
装饰器(Decorators)是 Python 的一个重要部分。
简单地说:他们是修改其他函数的功能的函数,他们有助于让我们的代码更简短,更有范!
也可以说是:为了增加功能而对函数或者类进行功能扩充的一种语法。就像女孩化妆一样,女孩还是那个女孩,但是化妆过后更加漂亮了~
2.用代码来描述:
首先我们声明一个基本函数,然后调用函数:
# 声明一个基本函数 def test1(): print('我是一个基本函数') # 调用函数 test1()
运行后会输出: 我是一个基本函数
我们需要在这个基本函数的输出前后添加一些功能:
# 声明一个基本函数 def test(): print('我是一个基本函数') # 定义一个给test函数增加功能的函数 def func2(func): # 增加功能一 print('我是增加的功能一') # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2 func() # 相当于调用test函数 # 增加功能二 print('我是增加的功能二') # 将基本函数作为参数传递给func2,并且调用func2 func2(test)
运行后会输出: 我是增加的功能一
我是一个基本函数
我是增加的功能二
但是,这样我们是运行的增加功能的函数,并非我们最开始的基本函数test,因此我们需要在func2函数里再定义一个函数,把tset函数传递进去,然后返回定义的这个函数;
说着可能有点迷糊,我们看一下代码就懂了
# 声明一个基本函数 def test(): print('我是一个基本函数') # 定义一个给test函数增加功能的函数 def func2(func): def infunc(): # 增加功能一 print('我是增加的功能一') # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2 func() # 相当于调用test函数 # 增加功能二 print('我是增加的功能二') # 这里infunc不能加(),加()后就会变成调用infunc函数 # 返回一个函数,这里返回的函数就是我们未来添加好功能的函数,即具备基本函数也具备增加功能的函数 return infunc # 装饰操作 test = func2(test) # 调用装饰后的test函数 test()
运行结果:我是增加的功能一
我是一个基本函数
我是增加的功能二
这就是我们想要的功能呀!这也就装饰器的原理,但是我们需要用装饰器的语法来写;
这里可能有人没看懂 装饰操作 :test = func2(test) 这里func2(test)的返回值返回的是函数infunc,类似下面的代码,可以自己运行下:
def test(): print('hello,python') func = test func()
用装饰器语法来写上面的函数:
# 定义一个给test函数增加功能的函数 def func2(func): def infunc(): # 增加功能一 print('我是增加的功能一') # 调用基本功能,这里如果需要调用基本功能,我们需要把基本函数作为参数传递给func2 func() # 相当于调用test函数 # 增加功能二 print('我是增加的功能二') # 这里infunc不能加(),加()后就会变成调用infunc函数 # 返回一个函数,这里返回的函数就是我们未来添加好功能的函数,即具备基本函数也具备增加功能的函数 return infunc # 装饰操作 @func2 # 等价于test = func2(test) # 声明一个基本函数 def test(): print('我是一个基本函数') # 调用装饰后的test函数 test()
运行结果:我是增加的功能一
我是一个基本函数
我是增加的功能二