Что выведет код Middle Декораторы обновлено
Порядок применения и вызова декораторов
Вопрос
Что выведет код? По строке на каждый print.
def tag(name):
def deco(fn):
print('apply', name)
def w():
return f'<{name}>' + fn() + f'</{name}>'
return w
return deco
@tag('b')
@tag('i')
def text():
return 'hi'
print(text())
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: apply i, apply b, <b><i>hi</i></b>. Применяются снизу вверх: сначала tag("i") оборачивает функцию, затем tag("b") оборачивает результат.
Что выведет
apply i
apply b
<b><i>hi</i></b>
Разбор
Применяются снизу вверх: сначала tag("i") оборачивает функцию, затем tag("b") оборачивает результат. При вызове внешняя обёртка b вызывает внутреннюю i, отсюда <b><i>hi</i></b>.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.