自己碰了一兩年的python,一直都沒用過「@」這個裝飾詞(decorator),原因不外乎是用現有的coding技巧已足夠應付實作,再來就是覺得難懂就不想去碰它。寫程式嘛,能寫出來就好了,用太多炫技只是讓大家很難讀懂而已。但總隱約覺得這個「@」可能是基本該會的技巧,還是認真學一下好了
def makebold(fn):
def wrapped():
return "" + fn() + ""
return wrapped
def makeitalic(fn):
def wrapped():
return "" + fn() + ""
return wrapped
@makeitalic
@makebold
def hello():
return "hello world"
print hello()
>>>
hello world
>>>
覺得這段程式碼最容易看出@的功能,以及它叫作decorator的由來。簡單的說,就是先把主function寫好後,再寫另外寫個裝飾function,然後用@把主function包進來。
- hello()用來print一行字
- 前置一個@makebold,執行hello()時實際上是把hello()丟進makebold()裡執行(裝飾)
- 再前置一個@makeitalic,執行hello()時實際上是把hello()先丟進makebold()再丟進makeitalic()裡執行
但我還是覺得不用@我也能活啦.......
來源: [python] decorator 之很難理解的快速理解法
沒有留言:
張貼留言