Skip to content

Decorator

Decorator execution order

  • Execution order: outermost first
  • Return order: innermost first

Example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def make_bold(fn):
    def wrapper():
        print('bold called')
        return fn() + ' bold'

    return wrapper

def make_italic(fn):
    def wrapper():
        print('italic called')
        return fn() + ' italic'

    return wrapper

@make_bold
@make_italic
def hello():
    # make_bold will be called first
    # make_italic will return first
    print('hello called')
    return "hello"

print(hello())

Output:

1
2
3
4
bold called
italic called
hello called
<b><i>hello</i></b>