Выбор ответа 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)).
Варианты ответа
BAABABправильный ответ
Разбор
Запись разворачивается в f = a(b(f)). При вызове сначала срабатывает внешняя обёртка a, она печатает A и вызывает обёртку b, которая печатает B и вызывает исходную функцию. Применяются декораторы снизу вверх, а выполняются обёртки сверху вниз.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.