装饰器函数
这里定义了一个 func 函数, 打印'我是 func 函数'
- def func():
- print('我是 func 函数');
- time.sleep(1);
假设, 想要在 func() 函数的基础之上新增的一个功能, 计算 func 函数执行所用的时间
- import time;# 时间模块, 处理时间操作
- # 开闭原则, 对扩展开放, 对修改封闭
- def func():
- print('我是 func 函数');
- time.sleep(1);# 休眠一秒
- #tools 方法就是 func 方法的装饰器
- def tool():
- def inner():# 利用了高阶函数
- #开始的时间
- starttime=time.time();
- func();# 调用函数执行上面的方法
- #结束的时间
- endtime=time.time();
- print('用时:%s 秒'%(endtime-starttime));
- return inner;
- inner=tool();
- inner();
- #################### 调用的方式混乱 以上策略不推荐
- # 接下来使用装饰器, 这种在代码运行期间动态增加功能的方式, 称之为 "装饰器"(Decorator). 本质上, decorator 就是一个返回函数的高阶函数.
- def logger(flag):
- #装饰器
- def tool(f):#f:func 方法的方法名
- def inner():# 利用了高阶函数
- #开始的时间
- starttime=time.time();
- f();# 真正的执行方法, 调用了 func
- #结束的时间
- endtime=time.time();
- print('用时:%s 秒'%(endtime-starttime));
- if flag=='true':
- print('你传入了 TRUE 变量')
- return inner;# 内层方法的函数名
- return tool;
- # 主方法. 想要给修饰器传参, 在修饰器外重新生成修饰器
- @logger('true')
- def func():
- print('我是 func 函数');
- time.sleep(1);# 休眠一秒
- func();
来源: http://www.bubuko.com/infodetail-2825988.html