python基础-装饰器
python基础-装饰器
什么是装饰器?
不改变函数原来的调用方式 动态地 给函数 添加功能
装饰器的原则是什么?
装饰器遵循: 开放 封闭原则
-
对添加新功能是开放的
-
硬改已经存在的代码
装饰器使用场景
装饰器一般用于动态添加功能,相当于对原来的函数进行扩展,python中叫语法糖 一般改别人代码,不想改动原来的功能代码,直接使用装饰器给这个方法添加新功能
学习装饰器之前,先对函数进行简单的复习
# 1. 函数的定义等 # def func(): # print("哈哈哈") # func() # 函数的调用 # print(func) # 函数的内存地址 # # 2. 函数可以像变量一样用来赋值 # yingying = func # 函数可以作为变量去赋值 # yingying() # 相当于执行了原来的func() # 3. 函数名可以像普通变量一样放到容器(列表、字典、元组...)中 # def f1(): # print("f1") # def f2(): # print("f2") # list1 = [f1, f2] # for i in list1: # i() # # 4. 函数可以当成参数传到别的函数中 # def f3(arg): # arg() # # # f3(func) # 5. 函数可以作为返回值 def f4(): def f5(): print("iPhone Xs MAX太贵啦...") return f5 ret = f4() print(ret) ret()
写一个函数装饰器
def create_people(): # print("加口唾沫~") # 违背了封闭原则 print("抓把泥,捏个人,吹口气, 活了!") # def koushui_create_people(arg): #装饰器内部用的就是这个机制,首先使用了闭包,在不改变原先函数的基础上添加新功能 # def inner(): # print("加口唾沫") # arg() # print("上个色儿~") # return inner # create_people() # create_people() # create_people() # koushui_create_people() # koushui_create_people() # koushui_create_people() # ret = koushui_create_people(create_people) # print(ret) # ret() create_people = koushui_create_people(create_people) create_people() # 加口唾沫~ # 抓把泥,捏个人,吹口气, 活了! # 语法糖 def koushui_create_people(arg): def inner(): print("加口唾沫") arg() print("上个色儿") return inner #需要注意的点:1.定义方法必须在被装饰的函数的上面执行. # 2.inner记住不能加(),如果加了括号我定义的函数回立刻执行把结果返回了 @koushui_create_people def create_people(): # print("加口唾沫~") # 违背了封闭原则 print("抓把泥,捏个人,吹口气, 活了!"