Python 装饰器
来源:互联网 发布:c语言不同数据类型运算 编辑:程序博客网 时间:2024/06/08 09:29
装饰器 decorator:可动态为函数添加新的功能
使用方法:
import time def performance(f): #定义装饰器函数,并传入需要被包装的函数 def fn(*args, **kw): #对传进来的函数进行包装的函数,此参数自适应任何参数定义的函数 t_start = time.time() #记录函数开始时间 r = f(*args, **kw) #调用函数 t_end = time.time() #记录函数结束时间 print 'call %s() in %fs' % (f.__name__, (t_end - t_start)) #打印调用函数的属性信息,并打印调用函数所用的时间 return r #返回包装后的函数 return fn #调用包装后的函数 @performance #调用装饰器 def factorial(n): #定义乘数函数(需要包装的函数) return reduce(lambda x, y: x * y, range(1, n + 1)) print factorial(10)
上述装饰器属于无参装饰器,含参装饰器参考http://www.imooc.com/code/6066
带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收原函数并返回新函数
import timedef performance(unit): def p_decorator(f): def fn(*args, **kw): t_start = time.time() r = f(*args, **kw) t_end = time.time() print 'call %s() in %f%s' % (f.__name__, (t_end - t_start)*1000,unit) return r return fn return p_decorator@performance('ms')def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1))print factorial(10)
Python内置的functools可以用来自动化完成这个“复制”的任务
import time, functoolsdef performance(unit): def p_decorator(f): @functools.wraps(f) def fn(*args, **kw): t_start = time.time() r = f(*args, **kw) t_end = time.time() print 'call %s() in %f%s' % (f.__name__, (t_end - t_start)*1000,unit) return r return fn return p_decorator@performance('ms')def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1))print factorial.__name__
阅读全文
0 0
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- Python装饰器详解
- python 装饰器
- 设计模式-20-访问者模式
- OkHttp网络访问的封装
- 奇偶剪枝
- HDFS的java操作
- 端口分类调研
- Python 装饰器
- 001_JavaScript简介
- 90. Subsets II
- 倍增LCA模板
- solrJ的使用
- COJ1973-给自己出题的小X
- windows注册表文件损坏了,导致windows无法启动,解决办法!
- sqlserver通用类库
- 写了一个Xcode的小demo遇到了一些问题