装饰器:概念已知一个函数,如果要给该函数增加新的功能 #但是不希望修改该函数, # 在python中,这种在代码运行期间动态执行的机制被称为装饰器 #装饰器起到的作用:为已经存在的函数或类添加额外的功能 #装饰器的本质:实际上就是一个闭包 #闭包的概念:内部函数访问外部函数中的变量 def mm(l): def pppp(): print(l) return pppp ggg=mm(12) print(ggg)#实际上就是pppp在计算机的存储位置 ggg()#相当于调用pppp函数 print("") #装饰器 #定义闭包,给外部函数设置参数, # 1,参数表示需要被装饰的函数,命名一般用:f/fun/func # 2在内部函数中调用被装饰的函数,同时增加新的功能 def smss():#被装饰的函数 print("你好呀,吃了吗?") def mmm(fun): def pppp(): # 2在内部函数中调用被装饰的函数,同时增加新的功能 fun()#调用原函数 print("bus running-=-=-=") print(fun) #新增的功能 #新增的功能可以和调用原函数调用顺序,不影响 return pppp ff=mmm(smss)#需要装饰,所以将sms传参给mm ff()#调用pppp函数 #1,在这里mmm就是装饰器的名称[外部函数的函数名] #2,pppp实际上就是装饰器的核心器的核心功能[调用新功能,新增新的函数] #3,再pppp中,新增功能还是调用原函数,理论上没有先后顺序 #一般需要根据具体的需求决定 #方式二,用@xxx剋将一个装饰器作用于一个函数上,只需要将@xxx #书写在一个函数的前面,则表示xxx装饰器装饰的指定函数 #@xxx:xxx表示装饰器的名称[外部函数的函数名] #注意:如果使用@xxx加载装饰器则表示装饰器先存在,然后才能使用 def outteer(p): def inner(): p() print("111") return inner @outteer def mu(): print("111222") mu() print('') def wsw(av): def ppp(): av() print("巫毒娃娃") return ppp @wsw def qqq(): print("mmmmmmmmmm") qqq() print("") #通过一个闭包,在不改变函数原本的情况下给原函数增加新的功能 def ggb(aaaaa): print("ggbccs") def mmmm(): aaaaa() print(",.,.") return mmmm @ggb def jjj(): print("yyyyy") jjj()
919补考英语,啊啊啊啊啊,又是秃头的一天
最新推荐文章于 2024-10-13 23:49:20 发布