Что такое декоратор в Python · Golang Backend — JobPilot

Что такое декоратор в Python

Golang Backend · 34%
Вопрос 2915 / #
Пример ответа

Коротко: Декоратор в Python — это функция, которая принимает другую функцию и расширяет её поведение без изменения её кода, что я использовал для добавления логирования, кэширования или проверки прав в веб-приложениях.

Ключевые идеи:
  • Декоратор оборачивает целевую функцию, добавляя функциональность до или после её вызова
  • Используется через синтаксис @decorator_name, что делает код чище и модульным
  • В моём опыте, декораторы упрощают повторное использование кода для аспектов, таких как аутентификация или мониторинг
Пример: Например, декоратор для логирования времени выполнения функции: def log_time(func): def wrapper(*args, **kwargs): start = time.time(); result = func(*args, **kwargs); print(f"Время выполнения: {time.time() - start} сек"); return result; return wrapper
Пример декоратора для кэширования результатов функции с использованием словаря
python
def cache_decorator(func):
    cache = {}
    def wrapper(*args):
        if args in cache:
            print("Возвращаю результат из кэша")
            return cache[args]
        result = func(*args)
        cache[args] = result
        return result
    return wrapper

@cache_decorator
def expensive_computation(n):
    print(f"Вычисляю для {n}")
    return n * n

# Использование
print(expensive_computation(5))  # Вычисляет и кэширует
print(expensive_computation(5))  # Возвращает из кэша
Вопросы для интервьюера:
  • Как вы реализуете декоратор с параметрами в Python?Создаю функцию, возвращающую декоратор: def retry(max_attempts): def decorator(func): def wrapper(*args, **kwargs): for i in range(max_attempts): try: return func(*args, **kwargs); except Exception: continue; raise Exception("Все попытки провалились"); return wrapper; return decorator
  • Какие встроенные декораторы в Python вы часто используете?@staticmethod, @classmethod для методов классов и @property для геттеров/сеттеров, а также @functools.lru_cache для мемоизации
Практический совет (на неделю):
  1. Попробуйте написать декоратор для логирования вызовов функций в своём проекте, чтобы отслеживать поведение
  2. Изучите библиотеку functools для готовых декораторов, таких как wraps, чтобы сохранять метаданные функций
Golang Backend
Общий
34%
Навигация
Расскажи про свой опыт
Следующий: Какие у тебя зарплатные ожидания
Предыдущий: Расскажи про свой опыт

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.