В Python декоратор - это специальная функция, которая используется для изменения функциональности другой функции. Декораторы предоставляют простой и элегантный способ добавления функциональности к существующим функциям без необходимости изменять их исходный код.
Основная идея декораторов заключается в том, что они позволяют обернуть функцию в другую функцию и расширить ее функциональность. Декораторы - это просто функции, которые принимают функцию в качестве аргумента и возвращают другую функцию. Внутри декоратора можно изменить или добавить код перед и после вызова исходной функции.
Декораторы в Python обычно используются для задач, таких как:
- Логирование: декораторы позволяют записывать информацию о вызове функции для отладки или мониторинга.
- Проверка параметров: декораторы могут использоваться для проверки типов параметров функции или установки предусловий перед вызовом функции.
- Кэширование: декораторы позволяют кэшировать результаты выполнения функции, чтобы избежать повторных вычислений.
- Аутентификация и авторизация: декораторы могут использоваться для проверки прав доступа пользователя перед вызовом функции.
- Изменение поведения функции: декораторы могут изменять поведение функции, например, обработка исключений или обертывание функции в блок try-except.
- Измерение времени выполнения: декораторы могут использоваться для измерения времени выполнения функции или кода.
Декораторы можно использовать для любого типа функций, включая обычные функции, методы классов и статические методы. Они также могут быть вложенными, то есть декоратор может быть применен к другому декоратору.
Пример использования декоратора в Python:
python
def log(func):
def wrapper(*args, **kwargs):
print(f"Вызвана функция {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log
def add(a, b):
return a + b
result = add(2, 3) # Вывод: "Вызвана функция add"
# Возвращаемое значение: 5
В этом примере `log` является декоратором, который добавляет логирование к функции `add`. При вызове функции `add`, сначала будет выведено сообщение "Вызвана функция add", а затем будет выполнено действительное сложение и возвращено результат.
Декораторы облегчают работу с функциями, позволяя добавлять общую функциональность к группе функций без необходимости редактировать каждую функцию отдельно. Они также помогают сохранять структуру исходного кода и сделать его более модульным и гибким.