推荐查看博客:python的修饰器
对于Python的这个@注解语法糖- Syntactic Sugar 来说,当你在用某个@decorator来修饰某个函数func时,如下所示:
@decorator
def func():
pass
其解释器会解释成下面这样的语句:
func = decorator(func)
是的,上面这句话在真实情况下执行了。如果我们执行以下代码:
def fuck(fn):
print "fuck %s!" % fn.__name__[::-1].upper() @fuck
def wfg():
print 'abc'
输出:
fuck GFW!
所以一般我们写修饰器,都是写一个二级函数,返回一个函数。例如下面代码:
def hello(fn):
def wrapper():
print "hello, %s" % fn.__name__
fn()
print "goodby, %s" % fn.__name__
return wrapper @hello
def foo():
print "i am foo" foo()
输出:
hello, foo
i am foo
goodby, foo
相当于执行
foo=hello(foo)
foo()