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()
Đầu ra: "<b><i>hello world</i></b>"
Tôi hiểu đại khái về decorator và cách nó hoạt động với một trong số nó trong hầu hết các ví dụ.
Trong ví dụ này, có 2 trong số đó. Từ đầu ra, có vẻ như nó @make_italic
thực thi trước, sau đó @make_bold
.
Điều này có nghĩa là đối với các chức năng được trang trí, trước tiên nó sẽ chạy chức năng đó trước rồi chuyển dần lên trên cùng cho các trình trang trí khác? Giống như @make_italic
lần đầu tiên sau đó @make_bold
, thay vì ngược lại.
Vì vậy, điều này có nghĩa là nó khác với tiêu chuẩn của cách tiếp cận từ trên xuống trong hầu hết các ngôn ngữ lập trình? Chỉ cho trường hợp này của người trang trí? Hoặc là tôi sai?