python3-day4(装饰器)
一.基本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print 'foo' foo = lambda x: x + 1 foo() # 执行下面的lambda表达式,而不再是原来的foo函数,因为函数 foo 被重新定义了 |
二.example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #一个参数 def w1(func): #func = f1 def inner(arg): #arg是f1的参数 print ( 'auth %s' % arg) #新增加内容 return func(arg) #运行老f1 return inner #返回inner给新的f1 @w1 def f1(arg): print ( 'f1 %s' % arg) f1( 'alex' ) #运行新的F1了 #二个参数 def w2(func): def inner(arg1,arg2): print ( "auth %s,%s" % (arg1,arg2)) return func(arg1,arg2) return inner @w2 def f2(arg1,arg2): print ( "f2 %s,%s" % (arg1,arg2)) f2( 'tom' , 'boy' ) #N个参数 def w3(func): def inner( * args, * * kwargs): print ( 'auth' ) return func( * args, * * kwargs) return inner @w3 def f3(arg1,arg2,arg3): print ( "f3 %s,%s,%s" % (arg1,arg2,arg3)) f3( 'tom' , 'is' , 'boy' ) #一个函数被多个装饰器装饰 def w1(func): def inner( * args, * * kwargs): print ( 'w1' ) return func( * args, * * kwargs) return inner def w2(func): def inner( * args, * * kwargs): print ( 'w2' ) return func( * args, * * kwargs) return inner @w1 @w2 def f3(arg1,arg2,arg3): print ( "f3 %s,%s,%s" % (arg1,arg2,arg3)) f3( 'tom' , 'is' , 'boy' ) #通用装饰器 def Before(request,kargs): print ( 'before' ) def After(request,kargs): print ( 'after' ) def Filter (before_func,after_func): def outer(main_func): def wrapper(request,kargs): before_result = before_func(request,kargs) main_result = main_func(request,kargs) after_result = after_func(request,kargs) return wrapper return outer @Filter (Before, After) def Index(request,kargs): print ( 'index' ) Index( 'a' , 'b' ) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)