Выбор ответа Junior Декораторы спрашивают часто обновлено

Во что разворачивается @decorator

Вопрос

Чему эквивалентна запись @log над def f(): ...?

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

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

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

Коротко

Правильный ответ: f = log(f) сразу после определения функции. Декоратор это синтаксический сахар: после выполнения def имя f перепривязывается к результату log(f).

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

  1. log(f) вызывается при каждом вызове f
  2. f наследуется от log
  3. f = log(f) сразу после определения функцииправильный ответ
  4. log вызывается один раз при первом вызове f

Разбор

Декоратор это синтаксический сахар: после выполнения def имя f перепривязывается к результату log(f). Сам log выполняется один раз при определении функции, а при каждом вызове работает уже обёртка, которую он вернул. Наследования функций в Python нет, а «ленивого» применения при первом вызове тоже нет.

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

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