推薦查看博客:python的修飾器html
對於Python的這個@註解語法糖- Syntactic Sugar 來講,當你在用某個@decorator來修飾某個函數func時,以下所示:python
@decorator def func(): pass
其解釋器會解釋成下面這樣的語句:shell
func = decorator(func)
是的,上面這句話在真實狀況下執行了。若是咱們執行如下代碼:app
def fuck(fn): print "fuck %s!" % fn.__name__[::-1].upper() @fuck def wfg(): print 'abc'
輸出:函數
fuck GFW!
因此通常咱們寫修飾器,都是寫一個二級函數,返回一個函數。例以下面代碼:spa
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()
輸出:code
hello, foo
i am foo
goodby, foo
至關於執行htm
foo=hello(foo)
foo()