【装饰器】
将方法和函数封装,使之可以对其他函数的功能进行增强。
#coding:utf8 def mydecorator(function): def _mydecorator(*args,**kw): #在调用实际函数之前的准备工作 print 'start' res = function(*args,**kw) #做完某项填充工作 print 'end' return res return _mydecorator @mydecorator def demo(): print 'This is test' demo()
输出
start This is test end
含有参数的装饰器:
def mydecorator(arg1,arg2): def _mydecorator(func): def __mydecorator(*args,**kw): #在调用实际参数之前所做的工作 print arg1 res = func(*args,**kw) #做完某些填充工作之后 print arg2 return res return __mydecorator return _mydecorator @mydecorator('123','5443') def bar(): print '@@@' bar()
以及;类装饰器
class demo(object): def __init__(self,func): self._func = func def __call__(self): print 'start' self._func() print 'end' @demo def f1(): print 'bar' f1()
【2】常用装饰器
import signal,functools class TimeourError(Exception): pass def timeout(seconds,error_message= 'Function call timed out'): def decorated(func): def _headle_timeout(signum,frame): raise TimeourError(error_message) def wrapper(*args,**kwargs): signal.signal(signal.SIGALRM,_headle_timeout) signal.alarm(seconds) try: result = func(*args,**kwargs) finally: signal.alarm(0) return result return functools.wraps(func)(wrapper) return decorated