Декоратор с аргументами в Python

python decorators

В данной статье показан простой пример создания функции декоратора, которая принимает и использует один или несколько аргументов. Декоратор, который будет принимать аргументы, будет выглядеть следующим образом.

В качестве наиболее простого примера можно рассмотреть вывод некой информации до и после ввода функции.

В данном случае вывод будет представлен следующим образом.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!


Python декоратор без аргументов

В качестве примера рассмотрим декоратор без вводимых аргументов. Обычно для этого требуется создать функцию декоратора, которая станет вводимым аргументом. Таким образом, функция, которую вы декорируете, будет вводом функции декоратора.

Затем создается функцию оболочки внутри функции декоратора, которая будет выполнять аналогичную задачу. После этого функция декоратора вернет функцию оболочки с обновленным функционалом. Это будет показано в следующем примере. Здесь требуется поместить вводимую функцию в переменную result, а затем вернуть f-строку с этой переменной.

Итак, во время декорирования исходной функции с функцией my_decorator можно увидеть, что выдача декорируемой функции меняется.

Результат вывода в данном случае будет следующим:

Python декоратор с аргументом

Зачастую время на составление кода весьма ограничено, и усложнять его структуру совсем не хочется. В данном примере показано, что оптимальнее будет сосредоточиться не на тексте вывода, а на возможности проконтролировать процесс внесения аргумента в декоратор. Поначалу это может быть достаточно сложным. Для самостоятельного изучения потребуются многие часы поиска актуальной информации в сети и согласования ее в уме.

В результате прошлого примера была получена функция внутри функции. Теперь задача несколько усложнится — нам потребуется функция внутри функции, которая также находится внутри функции. Примеры подобного могут встречаться и в других языка программирования. Однако тем, кто начал изучать программирование с Python, это будет в новинку. Итак, функция декоратора может выглядеть следующим образом.

Теперь, можно внести аргумент в декоратор, который будет использован внутри функции декоратора. Таким образом, итоговая функция декоратора примет аргумент из декоратора, а следующая вложенная функция примет декорируемую функцию в качестве ввода (как в первом примере), и сможет использовать ввод из итоговой функции.

Для начала необходимо вернуть функцию wrapper функции the_real_decorator, а затем вернуть the_real_decorator действующей функции декоратора.

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

Заключение

В данной статье был представлен наиболее простой способ использования одного или нескольких аргументов с функцией декортора в Python.