Ordem de execução do decorador

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()

Resultado:"<b><i>hello world</i></b>"

Eu compreendo sobre decoradores e como ele funciona com um deles na maioria dos exemplos.

Neste exemplo, existem 2. A partir da saída, parece que@make_italic executa primeiro, depois@make_bold.

Isso significa que, para as funções decoradas, ele executará a função primeiro e depois avançará para o topo de outros decoradores? Gostar@make_italic primeiro, então@make_bold, em vez do oposto.

Então isso significa que ele é diferente da norma da abordagem de cima para baixo na maioria dos idiomas de programação? Apenas para este caso de decorador? Ou eu estou errado?

questionAnswers(1)

yourAnswerToTheQuestion