装饰器--函数
装饰器,主要是要了解装饰的是执行过程。
1 # 高级装饰器 2 def fun1(): 3 print("fun1") 4 5 def fun2(): 6 print("fun2") 7 8 def Filter(f1,f2): # 1.2 f1=fun1 f2=fun2 9 def outer(main_fun): # 3、outer(login) main_fun = login 返回inner 10 def inner(*args,**kwargs): 11 f1() 12 main_fun(*args,**kwargs) 13 f2() 14 return inner 15 return outer 16 17 # 1.1 、先执行Filter(fun1,fun2),返回outer,变成@outer 18 @Filter(fun1,fun2) # @outer 19 def login(what): # def login(): # 2、login = outer(login) # 4、 login = inner 20 print("login%s"%what) 21 22 login() # 5、执行inner
执行结果:
fun1
login可以了
fun2
第一步:执行第18行,执行Fiter(fun1,fun2)这个函数,将fun1、fun2的地址分别传递给f1和f2,返回outer函数的地址给第18行的Filter(fun1,fun2),这样@Filter(filter(fun1,fun2)就变成了@outer。
第二步:根据装饰器的语法,第18行和第19行可以理解为 login = outer(login),这样就会执行outer(login),把login地址传递给outer(main_fun)中的main_fun,并执行outer(main_fun),然后返回inner地址,所有login = inner
第三步:执行第22行login(),这里其实就是执行inner(),执行inter()函数里面那就是执行f1()也就是fun1()、f2()也就是fun2()、main_fun()也就是最原始的login()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!