装饰器
2021/11/18 6:10:05
本文主要是介绍装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1.定义
- 2.原则
- 3.简易版装饰器
- 4.装饰器(解决函数传值问题)
- 5.装饰器(解决返回值问题)
- 6.装饰器模板
- 7.使用装饰器实现认证功能
- 8.装饰器语法糖
- 9.双层装饰器
- 10.装饰器修复技术
- 11.有参装饰器
1.定义
在不改变被装饰对象内部代码和调用方式的基础上,从而实现新添功能的工具
2.原则
开放封闭原则
即,对扩展开放/对修改封闭
3.简易版装饰器
给函数添加统计执行时间的功能
# 版本演绎1.0版本 import time # 导入时间模块 # 定义一个被装饰的函数对象 def index(): start_time = time.sleep(2) print('from index >>>') # 定义一个实现实现计时功能的函数 def get_time(): start_time = time.time() index() end_time = time.time() print('函数运行时间:%s' % (end_time-start_time)) get_time()
# 版本演绎2.0版本 # 给函数添加统计执行时间的功能 import time # 导入时间模块 # 定义一个被装饰的函数对象 def index(): start_time = time.sleep(2) print('from index >>>') # 闭包函数,目的是将get_time这个函数名传给index def outer(func): # 定义一个实现实现计时功能的函数 # func = index def get_time(): start_time = time.time() func() end_time = time.time() print('函数运行时间:%s' % (end_time-start_time)) return get_time # 别忘了 index = outer(index) # 这一步是将index函数名传值到outer函数中,最后返还get_time函数名,再复制给假的index变量名 index()
4.装饰器(解决函数传值问题)
# 版本演绎3.0版本 # 给函数添加统计执行时间的功能 import time # 导入时间模块 # 定义一个被装饰的函数对象 def index(): time.sleep(2) print('from index >>>') def login(name): time.sleep(1) print('%s from login >>>' % name) # 闭包函数 def outer(func): # 定义一个实现实现计时功能的函数 # func = login def get_time(*args, **kwargs): start_time = time.time() func(*args, **kwargs) end_time = time.time() print('函数运行时间:%s' % (end_time-start_time)) return get_time login = outer(login) login('alan')
5.装饰器(解决返回值问题)
# 给函数添加统计执行时间的功能 import time # 导入时间模块 # 定义一个被装饰的函数对象 def index(): time.sleep(2) print('from index >>>') def login(name): time.sleep(1) # print('%s from login >>>' % name) return 0 print(login('alan')) # 闭包函数 def outer(func): # 定义一个实现实现计时功能的函数 # func = login def get_time(*args, **kwargs): start_time = time.time() func(*args, **kwargs) end_time = time.time() # print('函数运行时间:%s' % (end_time-start_time)) return get_time login = outer(login) login('alan') print(login('alan'))
改进
6.装饰器模板
7.使用装饰器实现认证功能
8.装饰器语法糖
9.双层装饰器
10.装饰器修复技术
11.有参装饰器
这篇关于装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Java管理系统项目实战入门教程
- 2024-11-02Java监控系统项目实战教程
- 2024-11-02Java就业项目项目实战:从入门到初级工程师的必备技能
- 2024-11-02Java全端项目实战入门教程
- 2024-11-02Java全栈项目实战:从入门到初级应用
- 2024-11-02Java日志系统项目实战:初学者完全指南
- 2024-11-02Java微服务系统项目实战入门教程
- 2024-11-02Java微服务项目实战:新手入门指南
- 2024-11-02Java项目实战:新手入门教程
- 2024-11-02Java小程序项目实战:从入门到简单应用