装饰器
2019-05-22 06:34:12来源:博客园 阅读 ()
第一种方法:
1 #加验证 2 def w1(Func): 3 def inner(): 4 print("正在验证权限") 5 Func() 6 return inner 7 def f1(): 8 print("...f1...") 9 def f2(): 10 print("...f2...") 11 f1= w1(f1) 12 f1()
1 #加验证 2 def w1(Func): 3 print("正在装饰") 4 def inner(): 5 print("正在验证权限") 6 Func() 7 return inner
8 #只要解释器执行到了这个代码,那么就会自动的进行装饰,而不是等到调用的时候才装饰的 9 @w1 10 def f1(): 11 print("...f1...") 12 #在调用f1之前,已经进行装饰了 13 f1()
使用装饰器对无参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(): 4 print("...func_in...1...") 5 functionName() 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 @func 10 def test(): 11 print("...test...") 12 13 test()
使用装饰器对有参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(a,b):#如果a,b没有定义,会导致14行的调用失败 4 print("...func_in...1...") 5 functionName(a,b)#如果没有把a,b当做实参进行传递,会导致调用11行函数失败 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 @func 10 def test(a,b): 11 print("...test-a=%d,b=%d..."%(a,b)) 12 13 test(11,22)
使用装饰器对不定长参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(*args,**kwargs):#如果a,b没有定义,会导致14行的调用失败 4 print("...func_in...1...") 5 functionName(*args,**kwargs)#如果没有把a,b当做实参进行传递,会导致调用11行函数失败 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 print("...func...3...") 10 @func 11 def test(a,b,c): 12 print("...test-a=%d,b=%d,c=%d..."%(a,b,c)) 13 @func 14 def test2(a,b,c,d): 15 print("...test-a=%d,b=%d,c=%d,d=%d..."%(a,b,c,d)) 16 17 test(11,22,33) 18 test2(11,22,33,44)
装饰器对有返回值的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(): 4 print("...func_in...1...") 5 ret=functionName()#保存返回来的haha 6 print("...func_in...2...") 7 return ret#把haha返回到17行的调用 8 print("...func...2...") 9 return func_in 10 11 @func 12 def test(): 13 print("...test...") 14 return "haha" 15 16 17 ret=test() 18 print("test return value is %s"%ret)
通用装饰器
1 def func(functionName): 2 def func_in(*args,**kwargs): 3 print("记录日志") 4 ret=functionName(*args,**kwargs) 5 return ret 6 return func_in 7 8 @func 9 def test(): 10 print("...test...") 11 return "haha" 12 @func 13 def test2(): 14 print("...test2...") 15 @func 16 def test3(a): 17 print("...test3-a=%d..."%a) 18 19 ret=test() 20 print("test return value is %s"%ret) 21 22 a = test2() 23 print("test2 return value is %s"%a) 24 25 test3(11)
带有参数的装饰器
def func_arg(arg): def func(functionName): def func_in(): print("记录日志") functionName() return func_in return func #1.先执行func_arg("heihei")函数,这个函数的return 的结果是func这个函数的引用 #2.@func #3.使用func对test进行装饰 @func_arg("heihei")#相当于@func def test(): print("...test...") test()
原文链接:https://www.cnblogs.com/daxinzhe/p/10895123.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python_字符串方法 2019-08-13
- Python之装饰器笔记 2019-08-13
- python_公共方法 2019-08-13
- Python学习日记(九) 装饰器函数 2019-08-13
- python3 之 判断闰年小实例 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash