Декораторы – это специально созданные функции, которые помогают добавить дополнительную функциональность в уже существующий код. Другие языки программирования, такие как C, не имеют этой функции. Она изменяет поведение других функций, не прерывая функциональность основной функции.
В языке Python декораторы также могут быть функциями или классами. В случае класса функция действует как объект класса. Обычно декораторы вызываются перед определением функции, которую необходимо декорировать.
Предварительное условие
Чтобы понять концепцию декораторов, у вас должен быть установлен инструмент Spyder. Это инструмент программирования, поддерживающий множество языков приложений. В случае среды Linux вам необходимо установить Ubuntu в вашей системе, убедившись, что присутствие python уже настроено. Но если он не предустановлен, вам придется установить его через терминал Ubuntu.
Пример примера декораторов
Пример 1:
Ниже приведено изображение примера. Здесь мы взяли декоратор с именем «decorator1» и внутренний класс «new_func»; обе эти функции содержат аргументы. Мы подробно рассмотрим функциональность декоратора с аргументами.
В этом примере мы добавляем символ доллара с номером, который мы указываем в конце вызова функции. Это вызов декорированной функции. Myfunction используется, чтобы просто вернуть полученный аргумент. Исходный код приведен ниже. Выходные данные показывают, что символ и число объединены.
def decorator1(func): def new_func(n): return '$' + func(n) return new_func @decorator1 def myfunction(a): return (a) print(myfunction('77'))
Пример 2:
Есть два декоратора. Первым шагом является определение декоратора, а затем оболочка – это внутренняя функция. Декораторы относятся к функциям внутри функции. В последней функции возвращается внутренняя функция «wrapper». Двигаясь вперед, мы определили второй декоратор decorator2. После этого decorator2 оформляется, как показано во второй последней строке кода. И, наконец, мы вызываем декорированную форму функции.
$ Def decorator1(function) $ Def wrapper(): $ Print( «это есть первое сообщение» ) $ Function() $ Print( «это есть второе сообщение» ) $ Return wrapper $ Def decorator2(): $ Print( «это это третье сообщение » ) $ Decorator2 = decorator1(decorator2) $ Decorator2()
Результат демонстрируется в правой части экрана. Это показывает, что отображается первое сообщение. После этого сообщения отображается третье сообщение из-за вызова функции. Следовательно, второе сообщение отображается в конце.
Возврат значений из украшенных функций
Это пример передачи или получения аргументов в декораторе, как и простые функции, которые мы использовали для отправки значений. Здесь у внутренней функции есть параметры. При передаче аргументов для возврата значения с этим трудно справиться. Чтобы свести к минимуму эту проблему, мы будем использовать * args и ** kwargs в функции-оболочке.
В результате мы видим, сначала печатается python, а позже печатается «кодировать легко». Это из-за предпочтения вызова функции с аргументами.
Создайте цепочку декораторов
Мы составили цепочку декораторов с помощью звездочки и плюса. Для украшения функции используется более одного декоратора. Определены оба декоратора звезды и плюса. Затем оба декоратора прикрепляются к функции () путем их печати с помощью python3.8. Таким образом модифицируется функция и оформляется выходное сообщение.
Звездочки и знак плюса прикреплены таким образом, что каждый символ записывается до и после вызова функции f (). С каждой стороны строки прикреплены по 5 звездочек и 3 знака «плюс».
Добавление нескольких декораторов к одной функции
Оба декоратора определены в порядке вызова функций, который мы использовали позже. После этого ниже вызовов мы определим еще один декоратор, который разделит предложение и сделает его наполовину списком. В этом примере используются функции разделения строк и функции верхнего регистра.
$ Def decorator1(function): $ Def wrapper(): $Func=function() $ Splitted_string. = func.split.() $Return splitted_string. $ Return wrapper $ Def decorator2uppercase(function): $ Func = function() $ Make_uppercase. = func.uppe.r() $ Return make_uppercase. $ Return wrapper $ @decorator1 $ @decorator2uppercase $ Def say_hi..(): $ Return ‘python is good language’ $ Say_hi..()
В приведенном выше коде предложение сначала преобразуется в прописные буквы, а затем разбивается на две части. Вывод показывает предложение в верхнем регистре и делится на две половины, чтобы составить список. Принимая во внимание, что мы предоставили предложение строчными буквами.
Используйте декоратор Python при обработке исключений
В этом примере мы обработаем исключение. В качестве примера взят массив. После определения декораторов мы использовали функцию, которая принимает новое значение или позицию массива. Конкретное назначение этой функции – проверить условие. Мы использовали здесь оператор if, чтобы упростить задачу.
$ If pos >= len(array):
Эта строка является основой всего сценария, поскольку она определяет, что он работает. Он проверяет, превышает ли позиция массива размер массива, а затем отображается сообщение об ошибке. В противном случае функция будет выполнять действие декораторов.
$ array = ['a', 'b', 'c'] $ def decorator1(func): $ def newValueOf(pos): $ if pos >= len(array): $ print("Превышен индекс массива") $ return func(pos) $ return newValueOf $ @decorator1 $ def valueOf(index): $ print(array[index]) $ valueOf(15)
В результате показано значение индекса больше размера массива. Следовательно, отображается сообщение об ошибке.
Заключение
В этой статье мы видели много примеров декораторов и то, как они используются для украшения функции, не вызывая каких-либо изменений в функциональности функции. Теперь я считаю, что после каждого примера, описанного в этом руководстве, это поможет вам понять базовую концепцию примера декоратора python.