Что выведет код Middle Декораторы обновлено
Когда печатает декоратор
Вопрос
Что выведет код? По строке на каждый print.
def register(fn):
print('register', fn.__name__)
def wrapper():
print('call', fn.__name__)
return fn()
return wrapper
@register
def ping():
return 'pong'
print('ready')
print(ping())
print(ping.__name__)
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: register ping, ready, call ping, pong, wrapper. Декоратор выполняется сразу при определении ping, поэтому register ping идёт раньше ready.
Что выведет
register ping
ready
call ping
pong
wrapper
Разбор
Декоратор выполняется сразу при определении ping, поэтому register ping идёт раньше ready. Вызов ping() запускает обёртку: call ping, затем результат pong. Без functools.wraps имя функции стало wrapper.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.