简单说,装饰器的目的就是返回一个函数,并先于被修饰者执行。常见于函数调用权限的控制。
下面举例说明。
例如:
def test1(func):
def w1(*args, **kwargs):
print "w1"
return func(*args, **kwargs)
return w1
@test1
def test2():
print "test2"
定义装饰器函数test1(),其有一个参数,该参数是以test1为装饰器的函数,即本例中的test2();其中的func也是test2,w1的参数args, kwargs,实际上也就是test2的参数;
#调用
test2()
output:
w1
test2
更进一步,装饰器如何带有参数?
那就是再定义一个函数,再包裹一层。
def test11(parameter):
def t1(func):
def w11(*args, **kwargs):
print "w11:", parameter
return func(*args, **kwargs)
return w11
return t1
@test11("here")
def test2():
print "test2"
output:
w11:here
test2