python decorator的本質

推薦查看博客: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()
相關文章
相關標籤/搜索