装饰器,网上有很多文章,描述装饰器,看了总是半知半解,现在是终于明白装饰器的用法了
@deco(arg)
def func(*argc, **argv):
pass
等同于
#equal 说明:后面的func是指原定义的func,
#前面的func是指使用装饰器“装饰”后,我们再去使用的func定义,有点拗口 : )
func = deco(arg)(func)
于是调用的时候就是:
func(a,b) 等同于调用 deco(arg)(func)(a,b)
不过在声明的时候 deco(arg)(func)已经执行了一次了
>>> def mydeco(func):
print "wuha..."
def _mydeco(*argc, **argv):
print "call func before..."
ret = func(*argc, **argv)
print "call func after..."
return ret
print "after wuha..."
return _mydeco
>>> @mydeco #语法糖,就是 myfunc = mydeco(myfunc)
def myfunc():
print "myfunc call"
return 3
wuha...
after wuha...
>>> myfunc()
call func before...
myfunc call
call func after...
3
>>>
完