def make_bold(fn):
return lambda : "<b>" + fn() + "</b>"
def make_italic(fn):
return lambda : "<i>" + fn() + "</i>"
@make_bold
@make_italic
def hello():
return "hello world"
helloHTML = hello()
輸出:"<b><i>hello world</i></b>"
裝飾的執行順序
我大致瞭解關於裝飾,以及它如何在大多數例子是一個工作。
在這個例子中,有2個。從輸出看來,@make_italic
似乎首先執行,然後@make_bold
。
這是否意味着對於裝飾函數,它將首先運行函數,然後移動到其他裝飾器的頂部?像@make_italic
先是@make_bold
,而不是相反。
那麼這意味着它與大多數編程語言中的自頂向下方法的規範不同?只是爲了裝飾者的這種情況?或者我錯了?
是的,它從下往上傳遞結果到下一個 – 2014-12-07 11:28:37