[python]带参数的装饰函数解析

来源:互联网 发布:dhcp服务器linux 编辑:程序博客网 时间:2024/05/01 14:29

所谓装饰函数,也就是把目标函数包装下,再返回。


例如:

def log(f):

print "decorate the func " + f.__name__

def  wrapper(*args, **kw):

return f(*args, **kw)

return wrapper



@log

def a():

print "I am a"


log就是一个装饰函数。

在解析之前先强调一个概念。

那就是python当中,

单独引用函数名,是不会执行函数的。

只有函数名 + 参数,才表示执行该函数。


例如:

def test_A():

return 1

b = test_A    ---> 相当于定义了一个函数test_A的别名 b。

b = test_A()    --->  相当于 b= 1

这里要区分清楚。


解析带参数的装饰函数。

类似于

@log_with_para('test')

def a():

pass


因为装饰函数带了参数,相当于log函数立即执行了。

所以我们可以把 log_with_para('test')的执行结果,当成真正的装饰函数。

也就是说:

log_with_para函数本身,并不是装饰函数。

而是log_with_para函数的执行结果(return 值),才是真正的装饰函数!


所以上文示例中的log函数,要在外面再追加一层。应该改成下列形式:

def log_with_para(para):

def log(f):

print para                          # para 参数可以在内部任何地方使用。

print "decorate the func " + f.__name__

def  wrapper(*args, **kw):

return f(*args, **kw)

return wrapper

return log


0 0
原创粉丝点击