Декораторы в python
Иногда нужно модифицировать существующую функцию, не меняя при этом ее исходный код. Чаще всего добавляется выражение для отладки, чтобы посмотреть, какие аргументы были переданы.
Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую функцию.
Функция document_it() определяет декоратор, который:
- выведет имя функции и значения переданных в нее аргументов
- запустит функцию с полученными аргументами
- выведет результат
- вернет модифицированную функцию, готовую для использования
Передав любую функцию (func
) в document_it(), вернется новая функция с доп. выражениями, которые добавил document_it(). Декоратор не обязательно должен запускать код функции func
, но функция document_it() вызовет часть func
, чтобы вернуть результат работы функции func
, а также доп. данные:
Как альтернатива созданию декоратора вручную (👆) можно просто добавить конструкцию @имя_декоратора перед функцией
, которую нужно декорировать:
Несколько декораторов
У каждой функции может быть больше одного декоратора:
Декоратор, который ближе всего к функции (над def), будет выполняться первым и так наверх. Пример с двумя декораторами (с изменением их порядка для демонстрации):
Функции в python
Соус: Книга “Простой Python” → Глава 9. “Функции” → “Декоратор”