Выбор ответа Middle Декораторы обновлено

Порядок применения нескольких декораторов

Вопрос

Что напечатает вызов f()?

def a(fn):
    def w():
        print('A', end='')
        return fn()
    return w

def b(fn):
    def w():
        print('B', end='')
        return fn()
    return w

@a
@b
def f():
    pass

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: AB. Запись разворачивается в f = a(b(f)).

Варианты ответа

  1. BA
  2. A
  3. B
  4. ABправильный ответ

Разбор

Запись разворачивается в f = a(b(f)). При вызове сначала срабатывает внешняя обёртка a, она печатает A и вызывает обёртку b, которая печатает B и вызывает исходную функцию. Применяются декораторы снизу вверх, а выполняются обёртки сверху вниз.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.