首页 > 代码库 > python decorator的本质
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()
python decorator的本质
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。