翼度科技»论坛 编程开发 python 查看内容

Python初步了解装饰器

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
Python初步了解装饰器


  • 装饰器的概念
  • 装饰器的简单使用
  • 装饰器的进阶
  • 装饰器的练习
  • 装饰器的固定模块
  • 装饰器的语法糖
装饰器的概念
  1. 装饰器它不是一个新的知识点,它是有之前我们学习的名称空间、函数嵌套、闭包函数等知识点汇总而来
  2. 器:工具
  3. 装饰:为其他事物添加功能
  4. 装饰器:不修该装饰的源代码的情况下,不改变源代码的调用的前提下,对装饰对象进行功能的增加。
  5. 核心思想
  6. 开放封闭原则:
  7. 开发:对扩展功能的开放,在源代码不改变的情况下,进行功能的添加
  8. 封闭:源代码是封闭的
复制代码
  1. import time#内置时间模块
  2. def inside(group,s):
  3.     print('欢迎来到英雄联盟')
  4.     print(f'你所在的是{group}方阵营')
  5.     print(f'敌军还要{s}秒到达战场')
  6.     time.sleep(s)#设置时间间隔
  7.     print('全军出击')
  8. inside('红色',30)
  9. #tine.time()时间搓从1970年开始
  10. 方案1
  11. #没有修改调用方式,倒是修改了源代码
  12. import time#内置时间模块
  13. def inside(group,s):
  14.     stm_time=time.time()
  15.     print('欢迎来到英雄联盟')
  16.     print(f'你所在的是{group}方阵营')
  17.     print(f'敌军还要{s}秒到达战场')
  18.     time.sleep(s)
  19.     print('全军出击')
  20.     end_time=time.time()
  21.     print(end_time-stm_time)
  22. inside('红色',30)
复制代码
装饰器的简单使用
  1. 方案二
  2. 代码冗余
  3. import time
  4. def inside(group,s):
  5.     print('欢迎来到英雄联盟')
  6.     print(f'你所在的是{group}方阵营')
  7.     print(f'敌军还要{s}秒到达战场')
  8.     time.sleep(s)
  9.     print('全军出击')
  10.    
  11. stm_time=time.time()
  12. inside('红色',30)
  13. end_time=time.time()
  14. print(end_time - stm_time)
复制代码
  1. 方案三
  2. 调用方式被修改
  3. import time
  4. def inside(group,s):
  5.     print('欢迎来到英雄联盟')
  6.     print(f'你所在的是{group}方阵营')
  7.     print(f'敌军还要{s}秒到达战场')
  8.     time.sleep(s)
  9.     print('全军出击')
  10. def worap():
  11.     stm_time=time.time()
  12.     inside('红色',30)
  13.     end_time=time.time()
  14.     print(end_time - stm_time)
  15. worap()
复制代码
  1. 方案四
  2. import time
  3. def inside(group,s):
  4.     print('欢迎来到英雄联盟')
  5.     print(f'你所在的是{group}方阵营')
  6.     print(f'敌军还要{s}秒到达战场')
  7.     time.sleep(s)
  8.     print('全军出击')
  9. def worap(*args,**kwargs):
  10.     stm_time=time.time()
  11.     inside(*args,**kwargs)
  12.     end_time=time.time()
  13.     print(end_time - stm_time)
  14. worap('蓝色',30)
复制代码
  1. 方案五
  2. import time
  3. def inside(group,s):
  4.     print('欢迎来到英雄联盟')
  5.     print(f'你所在的是{group}方阵营')
  6.     print(f'敌军还要{s}秒到达战场')
  7.     time.sleep(s)
  8.     print('全军出击')
  9. def  ouct(func):
  10.     # func=inside
  11.     def worap(*args,**kwargs):
  12.         stm_time=time.time()
  13.         func(*args,**kwargs)
  14.         end_time=time.time()
  15.         print(end_time - stm_time)
  16.     return worap
  17. res=ouct(inside)
  18. res('蓝色',10)
复制代码
装饰器的进阶
  1. 方案六
  2. import time
  3. def inside(group,s):
  4.     print('欢迎来到英雄联盟')
  5.     print(f'你所在的是{group}方阵营')
  6.     print(f'敌军还要{s}秒到达战场')
  7.     time.sleep(s)
  8.     print('全军出击')
  9. def  ouct(func):
  10.     # func=inside
  11.     def worap(*args,**kwargs):
  12.         stm_time=time.time()
  13.         func(*args,**kwargs)
  14.         end_time=time.time()
  15.         print(end_time - stm_time)
  16.     return worap
  17. inside=ouct(inside)
  18. inside('蓝色',10)
复制代码
  1. 方案七
  2. 添加一个充电功能
  3. import time
  4. def inside(group,s):
  5.     print('欢迎来到英雄联盟')
  6.     print(f'你所在的是{group}方阵营')
  7.     print(f'敌军还要{s}秒到达战场')
  8.     time.sleep(s)
  9.     print('全军出击')
  10. def recharn(num):
  11.     for i in range(num,101):
  12.         time.sleep(0.05)
  13.         print(f'\r当前电量{"‖"*i}{i}%',end='')
  14.     print('电量已充满。')
  15. def  ouct(func):
  16.     # func=inside
  17.     def worap(*args,**kwargs):
  18.         stm_time=time.time()
  19.         func(*args,**kwargs)
  20.         end_time=time.time()
  21.         print(end_time - stm_time)
  22.     return worap
  23. inside=ouct(inside)
  24. inside('蓝色',10)
  25. recharn=ouct(recharn)
  26. recharn(20)
复制代码
  1. 方案八
  2. import time
  3. def inside(group,s):
  4.     print('欢迎来到英雄联盟')
  5.     print(f'你所在的是{group}方阵营')
  6.     print(f'敌军还要{s}秒到达战场')
  7.     time.sleep(s)
  8.     print('全军出击')
  9. def recharn(num):
  10.     for i in range(num,101):
  11.         time.sleep(0.05)
  12.         print(f'\r当前电量{"‖"*i}{i}%',end='')
  13.     print('电量已充满。')
  14. def  ouct(func):
  15.     # func=inside
  16.     def worap(*args,**kwargs):
  17.         stm_time=time.time()
  18.         res=func(*args,**kwargs)
  19.         end_time=time.time()
  20.         print(end_time - stm_time)
  21.         return res
  22.     return worap
  23. recharn=ouct(recharn)
  24. recharn(20)
复制代码
装饰器的语法糖
  1. 方案九
  2. import time
  3. def  ouct(func):
  4.     # func=inside
  5.     def worap(*args,**kwargs):
  6.         stm_time=time.time()
  7.         res=func(*args,**kwargs)
  8.         end_time=time.time()
  9.         print(end_time - stm_time)
  10.         return res
  11.     return worap
  12. @ouct
  13. def inside(group,s):
  14.     print('欢迎来到英雄联盟')
  15.     print(f'你所在的是{group}方阵营')
  16.     print(f'敌军还要{s}秒到达战场')
  17.     time.sleep(s)
  18.     print('全军出击')
  19. @ouct
  20. def recharn(num):
  21.     for i in range(num,101):
  22.         time.sleep(0.05)
  23.         print(f'\r当前电量{"‖"*i}{i}%',end='')
  24.     print('电量已充满。')
  25. recharn(20)
  26. inside('红色',10)
复制代码
装饰器的固定模块
  1. def oute(funs):
  2.     def waropper(*arges,**kwargs):
  3.         res=funs(*arges,**kwargs)
  4.         return res
  5.     return waropper
  6. # 时间差模块
  7. import time
  8. def oute_time(funs):
  9.     def waropper(*arges,**kwargs):
  10.         cmd_time=time.time()
  11.         res=funs(*arges,**kwargs)
  12.         out_time=time.time()
  13.         print(out_time-cmd_time)
  14.         return res
  15.     return waropper
  16. @oute_time
  17. def home():
  18.     time.sleep(2)
  19.     print('estdsfs')
复制代码
来源:https://www.cnblogs.com/zhangfanshixiaobai/p/17688503.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具