装饰器概念&实际使用干货
2018-06-18 01:32:01来源:未知 阅读 ()
- 本质是函数(装饰其他函数),是为其他函数添加附加功能
- 不能修改被装饰函数的源代码
- 不能修改被装饰函数的调用方式
- 函数及“变量”
- 高阶函数
- 把一个函数名当做实参传给另外一个函数(不修改被装饰函数,为其添加功能)
- 返回值中包含函数名(不修改函数调用方式)用return返回内存地址
- 嵌套函数
装饰器 = 高阶函数 + 嵌套函数
实际使用方式:
1 #装饰器试验 2 3 import time 4 5 #装饰器 6 def adron(fun): 7 print('传入待装饰函数的内存地址:%s'%fun) 8 def ad_x(*args,**kwargs): 9 start_time = time.time() 10 #fun+()的方式来执行被装饰函数 11 fun(*args,**kwargs) 12 stop_time = time.time() 13 print('visit world use time:%s'%(stop_time-start_time)) 14 return ad_x 15 16 #被装饰函数 17 @adron # @adron = adron(tet),将tet内存地址传当做参数传入装饰器函数 18 def tet(): 19 time.sleep(3) 20 print('hello world!') 21 #这里tet由装饰器装饰后,内存地址是ad_x的内存地址 22 tet() 23 24 @adron 25 def jsq(n,s): 26 for i in range(n): 27 time.sleep(s) 28 print(i) 29 30 jsq(5,0.1)
高阶装饰器:
1 #大装饰器 2 3 name = 'sober' 4 password = '123' 5 6 def badn(action): 7 print("登录方式:%s"%action) 8 #fun 由 @badn装饰器传入 9 def bt_badn(fun): 10 print('查看fun值:%s'%fun) 11 def adron(*args,**kwargs): 12 if action == 'local': 13 name_value = input('Please user name:') 14 password_value = input('Please Password:') 15 if name == name_value and password == password_value: 16 #fun 会执行被装饰函数,因为传入的fun是被执行函数的内存地址 17 ret_value = fun(*args,**kwargs) 18 print('装饰器内执行被装饰函数后返回前') 19 #返回被装饰函数执行后的结果 20 return ret_value 21 else: 22 print('username or password error') 23 elif action == 'ldap': 24 print('ldap is unrealized') 25 #return返回函数名称,是在返回函数内存地址,使用内存地址+()的方式调用函数 26 return adron 27 return bt_badn 28 29 30 def index(): 31 print('welcome !hello world!') 32 33 @badn(action='local') # @badn = badn(home) 如果要传入参数则需要在装饰器函数内再嵌套一层 34 def home(): 35 print('welcome home path') 36 return 'a' 37 38 @badn(action='ldap') 39 def ldap(): 40 print('welcome ldap enter') 41 42 index() 43 #这里的执行通过函数内存地址+()执行函数 44 #home() 45 print('显示home返回值:%s'%home()) 46 ldap()
注:学习oldboy python自动化运维——装饰器篇笔记
代码内加入了本人对装饰使用的理解
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Python安装
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- Python之装饰器笔记 2019-08-13
- Python学习日记(九) 装饰器函数 2019-08-13
- 进程相关 2019-08-13
- Python连载25-函数tell&write&writeline$&a 2019-07-24
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