【装饰器】
将方法和函数封装,使之可以对其他函数的功能进行增强。
#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