python 装饰器的一些用法

在代码运行期间动态增加功能的方式,称之为装饰器;
比如,在函数调用前后自动打印日志,检查权限,过滤请求等;
1. 简单用法
执行test_dec()方法前打印 call function_name

>>> def dec(func):
...   def wrapper(*args,**kw):
...     print "call %s"%func.__name__
...     return func(*args, **kw)
...   return wrapper
>>> @dec
... def test_dec():
...   print "test"
>>> test_dec()
call test_dec
test
>>> 

2.带参数的装饰器

>>> def log(text):
...     def dec(func):
...             @functools.wraps(func)
...             def wrapper(*args, **kw):
...                     print ('%s, %s') % (text, func.__name__)
...                     return func(*args, **kw)
...             return wrapper
...     return dec
... 
>>> 
>>> @log('test')
... def test():
...     print 'testcc'
... 
>>> 
>>> test()
test, test
testcc
>>> 

3.在执行方法的前后动态切入执行代码

>>> import functools  
>>> import time  
>>> def log(text):  
...     def metric(fn):  
...         @functools.wraps(fn)  
...         def wrapper(*args,**kw):  
...             begin=time.time()  
...             fv=fn(*args,**kw)  
...             end=time.time()  
            print('%s %s() executed in %s ms' % (text,fn.__name__,end-begin))  
... ...             return fv  
        return wrapper  
    return metric... ... 
... 
>>> 
>>> @log('testcc')
... def fast(x, y):  
...     time.sleep(0.12)  
...     return x+y
>>> fast(1, 2)
testcc fast() executed in 0.12248301506 ms
3
>>>

一些解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值