Ответ
Декоратор в Python — это функция, которая принимает другую функцию в качестве аргумента, расширяет её поведение и возвращает новую, обёрнутую функцию. Это мощный паттерн для добавления сквозной функциональности (например, логирование, кеширование, проверка прав) без изменения исходного кода целевой функции.
Пример простого декоратора для логирования:
def logger(func):
def wrapper(*args, **kwargs):
print(f'Вызов функции {func.__name__} с аргументами: {args}, {kwargs}')
result = func(*args, **kwargs)
print(f'Функция {func.__name__} вернула: {result}')
return result
return wrapper
@logger
def add(a, b):
return a + b
# Вызов обёрнутой функции
add(5, 3)
# Вывод:
# Вызов функции add с аргументами: (5, 3), {}
# Функция add вернула: 8
Синтаксис @decorator — это просто «синтаксический сахар» для add = logger(add). Для сохранения метаданных исходной функции (например, __name__) рекомендуется использовать functools.wraps.