目录
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.有参装饰器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/144032.html