修饰器
2016-02-26 14:15
190 查看
函数修饰器通常是用来给现存的函数增加每次函数被调用时都会运行的一层逻辑。它们可以用来记录函数的日志或者调用次数,检查参数的类型,用户权限等。
如果我想记录每个函数执行的时间,
1,可以在每个函数里面加逻辑,如果函数太多,代码改动太大
2,最大限度地少改动
还有一个问题如果输出foo.__name__
带参数的修饰器
可以使用functools模块
Python还提供其他的内置的装饰器比如staticmethod、classmethod和property
如果我想记录每个函数执行的时间,
1,可以在每个函数里面加逻辑,如果函数太多,代码改动太大
# -*- coding:utf-8 -*- import time def foo(): start= time.clock() time.sleep(2.5) end= time.clock() print end - start
2,最大限度地少改动
# -*- coding:utf-8 -*- import time def timeit(func): def wrapper(): start= time.clock() func() end= time.clock() print end - start return wrapper @timeit def foo(): time.sleep(2.5)
还有一个问题如果输出foo.__name__
print foo.__name__
wrapper
带参数的修饰器
# -*- coding:utf-8 -*- import time import functools def permission(level): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwds): start= time.clock() func(*args, **kwds) end= time.clock() print "level=%s"%level, func.__name__, end - start return wrapper return decorator @permission(level=2) def foo(l): print l foo(10)
可以使用functools模块
def timeit(func): @functools.wraps(func) def wrapper(): start= time.clock() func() end= time.clock() print end - start return wrapper @timeit def foo(): time.sleep(0.5) foo() print foo.__name__
Python还提供其他的内置的装饰器比如staticmethod、classmethod和property
相关文章推荐
- ubuntu keepalived 笔记
- lvs 笔记
- ubuntu iptables 共享上网
- iptables进行端口转发
- 关于wincvs1.3中文版对比版本中文乱码的解决方案
- 关于Mybatis的文章
- UVA 10214(p339)----Trees in a Wood
- 一个封装类教你学会SQLite数据库
- Java虚拟机类载入顺序
- 在Windows .NET平台下使用Memcached
- 微信企业号开发之菜单创建和触发
- cocos 入门三部曲
- Android 通知栏提示
- php更多加载...
- Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作 - Edison Chou
- docker的基础概念
- drupal mysql
- 大数据-互联网新的制高点
- C#札记
- Android状态保存与恢复