Python函数–装饰器
装饰器的定义
给已有函数增加额外的功能的函数, 本质上和闭包类似
遵循封闭开放
的代码原则
- 封闭:尽量少的修改原来的代码
- 开放:可以添加额外的功能
装饰器的特点
- 1.装饰前的函数本身(最初被装饰的函数),其实被指向
外层函数的参数
- 2.装饰后的函数,其实调用的是
内层函数
- 3.装饰器是不会去更改原先函数的参数及返回值
装饰器的语法糖用法
语法糖的理解:
形象的理解为,加了一层糖衣包装,.但是本质不便还是一颗糖
函数还是函数,但是在函数外部进行了处理,从而达到装饰的作用
装饰器的使用
# 第一步闭包
# 第二步@语法糖
def set_fun(func): # 这个就是传入要被装饰的函数名或者叫引用
def call_fun():
print("函数自身内存地址:",func)
# 调用原先的函数
func()
return call_fun
@set_fun # @set_fun ===> test = set_fun(test),这个就是语法糖的使用,前面是@后面跟上闭包的外层函数的名字即可,不加括号
def test():
print("test")
test()
上面出来了神奇的一幕,竟然先执行了函数set_fun
最后在执行了函数自身的代码.这个就是装饰器的作用,test
是原本的业务代码,我们遵循封闭开放
的原则,在不改动原先代码的时候,同时也添加了新的功能.
这个函数执行的顺序是可变的,有需求是需要先打印test函数
输出,最后在调用语法糖的内容,只需要吧func()
放在print
前面即可,不管是否是在前在后都是可以的.