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
>>>

一些解释

猜你喜欢

转载自blog.csdn.net/wang725/article/details/80457207