В этой части учебника мы рассмотрим что такое декоратор функции Python, ещё есть декоратор класса, но тут мы не будем его рассматривать, это уже в учебнике по ООП.
Что такое декоратор в Python:
Декоратор это по сути обёртка функции, то есть благодаря этому вы можете выполнять какое либо действие, перед или после выполнения основной функции, которую вы обернули.
Как работать с декоратором в Python:
Теперь перейдём к основной работе, суть создания декоратора в том, что вы создаёте функцию, куда передаёте функцию для обёртки, и потом внутри создаём ещё одну функцию, где работаем со всей логикой, и последние возвращаем её.
Теперь вот первый пример на практике:
1 2 3 4 5 6 7 8 9 10 11 12 | # Создание декоратора def decorator(fun): # Создание функции def wrapper(): # Вывод надписи "Перед функцией" print("Перед функцией") # Запуск нашей функции fun() # Вывод надписи "Перед функцией" print("После функции") # Возвращаем функцию return wrapper() |
Как видите в качестве аргумента мы должны передавать функцию, потом создаём ещё одну, и там выводим надпись «Перед функцией», это нужно чтобы обозначить, что выводим надпись до запуска нашей функции.
Потом уже запускаем нашу функцию, и выводим надпись «После функции», и возвращаем wrapper()
.
Также для примера создадим обычную функцию, которая будет выводить «Hello World!».
1 2 | def hello(): print("Hello World!") |
Теперь давайте вызовем функцию через decorator()
, вот как это делается:
1 | decorator(hello) |
Вот что должно вывестись:
Как видите всё работает как надо, но это не всё про декораторы, очень часто вам придётся их не много по-другому использовать.
Вот второй пример:
1 2 3 | @decorator def hello(): print("Hello World!") |
То есть теперь функция hello()
, будет сразу запускаться через декоратор, и как вы наверное уже поняли, по сути это синтаксический сахар, который немного может упростить жизнь.
Также стоит упомянуть, что мы можете таким образом использовать несколько декораторов, это тоже учитываете.
Вывод:
В этой части учебника вы прочитали как работают декоратор функции в Python, думаю вам было интересно и полезно.