Рубрики
Без рубрики

Пример декоратора Python

Пример декоратора Python, декоратор Python, Python Decorators, Python Method Decorator, Decorator Python с функциональными аргументами, обращение с исключением.

Автор оригинала: Pankaj Kumar.

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

Питонский декоратор

Надеюсь, что все вы в порядке и проводят очень хорошее время с Python. Сегодня мы узнаем о Python Decorator. Как я определил ранее, Python Decorator – это не что иное, как декоратор, который украшает функцию. Например, у вас есть цветочная ваза в вашем доме. Теперь вы хотите украсить его каким-то цветочным цветом и некоторыми орнаментами. Затем вас будет называться декоратором, а цветок и украшения будут называться дополнительными функциями.

Python Decorator Основная структура

Давайте посмотрим на основную структуру функции декоратора Python.

# example of decorator
def sampleDecorator(func):
    def addingFunction():
        # some new statments or flow control
        print("This is the added text to the actual function.")
        # calling the function
        func()

    return addingFunction


@sampleDecorator
def actualFunction():
    print("This is the actual function.")


actualFunction()

Приведенный выше код будет производить следующие вывода:

This is the added text to the actual function.
This is the actual function.

В приведенном выше коде в строке 12 есть специальный символ @, который в основном указывает на то, что функция, которая определяется чуть ниже, будет украшена с помощью Sampledecorator функция.

Приведенный выше код можно интерпретировать как следующий код предполагает, что у нас нет строки 12. Тогда, если мы хотим получить тот же аромат, то мы должны переопределить линию 17, что и следствие:

actualFunction = sampleDecorator(actualFunction)
actualFunction()

Тогда вы получите тот же выход, что и раньше. Наблюдая за двумя линиями, что вы можете предположить? Мы в основном перезаписываем функцию фактическая функция используя Sampledecorator Функция, где мы передаем фактическая функция в качестве аргумента функции декоратора.

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

Рассмотрим следующий код, где функция, которую мы хотим украсить, имеют аргумент. Обратите внимание, как мы реализуем метод декоратора Python. Помните пример цветочной вазы. Мы дадим, количество цветов, которые мы хотим поставить.

def flowerDecorator(vasel):
    def newFlowerVase(n):
        print("We are decorating the flower vase.")
        print("You wanted to keep %d flowers in the vase." % n)

        vasel(n)

        print("Our decoration is done")

    return newFlowerVase


@flowerDecorator
def flowerVase(n):
    print("We have a flower vase.")


flowerVase(6)

Можете ли вы взять на себя вывод ?? Выход вышеуказанного кода будет:

We are decorating the flower vase.
You wanted to keep 6 flowers in the vase.
We have a flower vase.
Our decoration is done

Понимание кода аргумента аргумента Python Decorator

Теперь давайте смоделируем вышеуказанный код. Первый в строке 18, мы называем функцию FlowerVase (6) Отказ Затем поток идет к линии 13 и видит, что эта функция украшена другой функцией, названной FlowerDeCorator Отказ Так что он идет к линии 1, где FlowerVase отправляется как аргумент.

Обратите внимание, что FlowerVase принимает параметр. В FlowerDeCorator Функция, мы определяем новую функцию имени NewflowerVase Это будет обернуть фактическую функцию и обратить внимание, что эта функция будет иметь точно так же или параметр, который принимает фактическую функцию (FlowerVase).

Затем мы добавляем некоторые новые функциональные возможности (печать некоторого сообщения) и вызова фактической функции с параметром, который был отправлен в качестве аргумента для FlowerDeCorator Отказ А потом, наконец, мы вернули NewflowerVase которые получили по линии 18, и мы получаем вывод, когда мы его украсили.

Вот как работает декоратор функции Python. Если ваша фактическая функция, имеющая более одного аргумента, то внутренняя функция декоратора будет иметь одинаковое количество параметров.

Пример декоратора Python для обработки исключений

Следующий код будет распечатать значение массива в отношении его индекса.

array = ['a', 'b', 'c']
def valueOf(index):
   print(array[index])
valueOf(0)

Это выведет:

a

Но что, если мы назовем функцию для,

valueOf(10)

Это выведет:

Traceback (most recent call last):
  File "D:/T_Code/Pythongenerator/array.py", line 4, in 
    valueOf(10)
  File "D:/T_Code/Pythongenerator/array.py", line 3, in valueOf
    print(array[index])
IndexError: list index out of range

Поскольку мы не обрабатывали, превысит ли данное значение индекса размером с массивом или нет. Итак, теперь мы будем украсить эту функцию следующим образом:

array = ['a', 'b', 'c']


def decorator(func):
    def newValueOf(pos):
        if pos >= len(array):
            print("Oops! Array index is out of range")
            return
        func(pos)

    return newValueOf


@decorator
def valueOf(index):
    print(array[index])


valueOf(10)

Теперь он будет выведен как ниже изображения.

Так что теперь мы обрабатывали возможную ошибку массива из связанного исключения. Это все о примере Python Decorator и как это работает.