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

Декоратор без return в обёртке

Вопрос

Что вернёт add(2, 3)?

def log(func):
    def wrapper(*args, **kwargs):
        print('call', func.__name__)
        func(*args, **kwargs)
    return wrapper

@log
def add(a, b):
    return a + b

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

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

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

Коротко

Правильный ответ: None. Обёртка вызывает func(args), но не возвращает результат, а функция без return возвращает None.

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

  1. 5
  2. Noneправильный ответ
  3. TypeError
  4. Функцию wrapper

Разбор

Обёртка вызывает func(*args), но не возвращает результат, а функция без return возвращает None. Это самая частая ошибка при написании декоратора на собесе. Исправление: return func(*args, **kwargs).

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

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