Декораторы на питоне. Какая? Почему? Когда?

В этом посте мы рассмотрим декораторы.

Мы постараемся решить следующие вопросы:

Кто они такие? Зачем они нужны? и когда они полезны?
Хорошо, давайте посмотрим на них один за другим.

Первый: какие они?

Проще говоря, насколько я понимаю:
Декораторы — это функции, которые принимают другую функцию в качестве входных данных и модифицируют/расширяют ее функциональность.

Чего ждать? Функция, которая принимает в качестве входных данных другую?
Да, в Python все является объектом (классы тоже). Таким образом, мы можем передать функцию в качестве аргументов.

Как вы называете функцию, которая принимает другую функцию в качестве аргументов? : Функция высшего порядка.

Пока только текст, кода нет. Давайте посмотрим на пример. Напишем простой декоратор:

# Create a simple function.
def hello():
    print("Hello user!.")

# Now we Define a decorator.
def my_decorator(some_function):

    def wrapper():
        print("I will check if the user is logged in or not before saying hello!")
        some_function()
        print("I want to say goodbye after it.")

    return wrapper

**Что мы здесь делали? **

Мы определили простую функцию и украсили ее другой функцией.

Вы можете задаться вопросом, зачем вводить новую функцию? Почему бы не изменить саму фактическую функцию?

Чтобы ответить на этот вопрос, давайте рассмотрим проблему.

Предположим, вы работаете над веб-сайтом.

Теперь есть требование не продолжать дальше, если пользователь не авторизован.

Теперь один из способов сделать это — проверить каждую функцию, которая нуждается в этом: «Вошел ли пользователь в систему?» проверяйте и изменяйте эти функции одну за другой.

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

**Решение? **

** Введите декораторов **

Вместо этого, если мы напишем декоратор и подключим его поверх каждой функции, которая нуждается в проверке, он будет намного чище и СУХОЙ (не повторяйтесь) код!

Это приведет нас к ответу на два наших вопроса, когда и зачем они нужны?

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

Один из примеров, который я использовал в своей работе, — проверка входа пользователя.

Знаете ли вы какие-либо другие варианты использования? Пожалуйста, дайте нам знать в комментариях спасибо. 😃

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *