python decorator的本质

推荐查看博客: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()
上一篇:「newbee-mall新蜂商城开源啦」 页面优化,最新版 wangEditor 富文本编辑器整合案例


下一篇:【英语】Bingo口语笔记(23) - 万圣节系列