Встречается на собеседованиях • сегодня

Почему нельзя сделать декоратор с помощью одной функции в Python

Декоратор в Python должен принимать функцию и возвращать обёртку (новую функцию). Если сделать его как обычную функцию без вложенности, он не сможет сохранить состояние или параметры декорируемой функции.

Пример неправильного подхода:

python
def decorator(func):
    print("Decorated!")  # Выполнится сразу при декорировании
    return func  # Просто вернёт исходную функцию

Правильный вариант использует вложенную функцию-обёртку:

python
def decorator(func):
    def wrapper(*args, **kwargs):
        print("Before call")
        result = func(*args, **kwargs)
        print("After call")
        return result
    return wrapper

Без wrapper декоратор не сможет:

  1. Перехватывать аргументы вызова
  2. Выполнять код до/после вызова функции
  3. Модифицировать результат или аргументы

Исключение — если декоратор просто заменяет функцию другой (редкий случай).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы