Пример ответа
Коротко: Декоратор в Python — это функция, которая принимает другую функцию и расширяет её поведение, не изменяя исходный код, что я часто использовал для логирования, кэширования или проверки прав доступа в своих проектах.
Ключевые идеи:
- Декоратор оборачивает функцию, добавляя функциональность до или после её вызова, что следует принципу DRY.
- В Python декораторы реализуются через замыкания или классы с методом __call__, и их можно применять с синтаксисом @decorator_name.
- Я применял декораторы для асинхронных задач, валидации входных данных и управления сессиями базы данных в веб-приложениях.
Пример: Например, я создал декоратор @timed для измерения времени выполнения функций в микросервисах, что помогло выявить узкие места в производительности.
Пример простого декоратора для логирования вызовов функций
python
import functools
import logging
logging.basicConfig(level=logging.INFO)
def log_execution(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.info(f"Вызов функции {func.__name__} с аргументами {args}, {kwargs}")
result = func(*args, **kwargs)
logging.info(f"Функция {func.__name__} завершилась с результатом {result}")
return result
return wrapper
@log_execution
def add(a, b):
return a + b
# Использование
result = add(3, 5) # В логах будет запись о вызове и завершении
Вопросы для интервьюера:
- Как вы реализуете декоратор с параметрами? — Использую вложенные функции: внешняя принимает параметры, внутренняя — декорируемую функцию, как в @retry(max_attempts=3).
- Какие есть ограничения у декораторов? — Они могут усложнить отладку из-за скрытия исходной функции, но functools.wraps помогает сохранить метаданные.
Практический совет (на неделю):
- Начните с создания декоратора для кэширования результатов тяжёлых вычислений, используя словарь для хранения.
- Изучите встроенные декораторы, такие как @staticmethod или @property, чтобы понять их применение в классах.
Python Backend
Общий
34%
Следующий: Какие у тебя зарплатные ожидания
Предыдущий: Расскажи про свой опыт