Использование декораторов в Python

Использование декораторов в Python

Рассмотрим в статье теоретическое и практическое применение декораторов в Python.

Введение

В большинстве случаев люди, занимающиеся программированием в Python, либо никогда не сталкивались с декораторами, либо если и сталкивались, то не могли их понять. В этой статье рассмотрим этот не очень изученный вопрос.

Прежде чем перейти дальше к основной теме, давайте рассмотрим основные моменты.

Объект первого класса 

В Python функции являются объектами первого класса:

  • Они могут храниться как переменные
  • Они могут быть переданы в качестве аргумента внутри функции
  • Они могут быть возвращены из функций в виде значений
  • Они действуют точно так же, как переменные

Функции высшего порядка

Функции высшего порядка — это функции, которые:

  • Принимают другую функцию в качестве аргумента.
  • Возвращают другую функцию.

Как раз декораторы используют эти функции.

Что такое декораторы?

Простыми словами, декораторы — это то, что украшает нашу функцию.

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

Алгоритм действий в программировании

Теперь пришло время создать своего собственного декоратора:

def new_decorator(func):
    def wrapper(*args, **kwargs):
        print("-")
        func(*args, **kwargs)
        print("*")

    return wrapper


@new_decorator
def hello(greeting, msg):
    print(greeting, msg)


hello(
    "Привет ребята",
    "Добро пожаловать",
)

Вывод программы:

-
Привет ребята Добро пожаловать
*

Пошаговое объяснение:

  1. new_decorator — это функция, содержащая функцию-оболочку.
  2. wrapper — это функция, которая обертывает в оболочку функцию. Она также добавляет некоторые характеристики к этой функции.
  3. new_decorator — это фактическая функция, которую мы хотим улучшить.
  4. Добавляя @ перед функцией, прикрепляем фактическую функцию к декоратору. Здесь @new_decorator — это имя функции декоратора.

Пример использования декоратора

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

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

Давайте посмотрим пример, где я хочу вычислить время, затраченное функцией:

from time import time


def perf(func):
    def wrapper(*args, **kwargs):
        t1 = time()
        result = func(*args, **kwargs)
        t2 = time()
        print(f"Затраченное время {t2-t1} сек")
        return result

    return wrapper


@perf
def run():
    for i in range(100000000):
        i * 6


run()

Вывод программы:

Затраченное время 9.065523862838745 сек

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

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

Заключение

Сегодня мы рассмотрели, как использовать декораторы, как их создавать и для чего они используются. Надеюсь статья была легкой в усвоении, а если нет — пишите ваши вопросы в комментариях 🙂

Егор Егоров

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

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. EdwardRaf

    Инженеры составляют график замеров, журнал проведения исследований, выдают акт выполнения работ https://osnovanie-svai.com/pile.php
    В акте отражают все показания контрольных приборов, изменения сопротивления грунта, выводы о пригодности грунта для дальнейшего строительства https://osnovanie-svai.com/

    Нагружение свай производят с помощью грузовой платформы и тарированных грузов либо с помощью системы балок и анкерных свай, воспринимающих выдергивающее усилие https://osnovanie-svai.com/pile.php

    до 1% от общего количества свай, для КС2 минимум 3 исп., для КС3 минимум 4 исп https://www.osnovanie-svai.com/politica.html

    Предварительные испытания грунтов вдавливанием — обязательные исследования для подтверждения устойчивости основания конструкции, с помощью которых инженеры детально оценивают стоимость установки фундамента и рассчитывают нагрузки https://osnovanie-svai.com/

    При испытаниях буровыми (буронабивными, буроинъекционными и т https://www.osnovanie-svai.com/politica.html
    д.) и набивными сваями начало испытаний назначают не ранее достижения бетоном свай 80 % проектной прочности https://osnovanie-svai.com/

    Алгоритм проведения динамических испытаний рассмотрен в СП 24 https://osnovanie-svai.com/
    13330 https://osnovanie-svai.com/
    2011 «Свайные фундаменты» https://osnovanie-svai.com/

    Ответить
  2. EdwardMip

    Высокое качество https://print-classic.ru/blank

    Срочная печать в день обращения https://print-classic.ru/figures

    После всех изменений, написать нам https://print-classic.ru/polzovatelskoe-soglashenie

    Печать на баннере https://print-classic.ru/otzyvy

    Информацию о способах и стоимости доставки по Москве и Московской области вы можете получить в разделе Доставка и оплата https://print-classic.ru/xlbanner

    Красочные и четкие изображения большого формата могут получиться только при соблюдении нескольких условий:

    Ответить
  3. TimothyIonix

    От 30000 рублей https://rentbusspb.ru/микроавтобус-mercedes-sprinter-vip/

    Год выпуска:
    Порядок аренды https://rentbusspb.ru/mercedes-benz-gl-63-амг/

    Машин в автопарке:
    Клуб проката автомобилей «CARS&GO» — компания, которая с 2015 года оказывает широкий комплекс услуг, начиная от предоставления авто в аренду и заканчивая инвестиционным управлением https://rentbusspb.ru/category/arenda-minivena/
    Наш автопарк насчитывает 400 автомобилей, которые поделены на классы — Эконом, Средний, Бизнес и Премиум, что позволяет удовлетворять запросы любого клиента https://rentbusspb.ru/mercedes-benz-sprinter-2018/

    г https://rentbusspb.ru/mercedes-benz-gl-63-амг/
    Иркутск, ул https://rentbusspb.ru/arenda-mercedes-s-class-w223-s-voditelem/
    Сухэ-Батора, 7 https://rentbusspb.ru/arenda-minivena-mercedes-vito-new-s-voditelem/

    Ответить
  4. AmunRa

    https://bizzocasinosi.com/

    Ответить
  5. Jeffreysuedy

    Уникальное предложение для вашего бизнеса!

    Ищете быстрые и недорогие решения для продвижения? Мы предлагаем прогоны с помощью Хрумера и ГСА по собственным уникальным базам!

    Почему выбирают нас?
    — Доступные цены без скрытых платежей
    — Мгновенные результаты — ваш сайт начнет получать трафик уже сегодня!
    — Уникальные базы, которые обеспечивают максимальную эффективность
    — Индивидуальный подход к каждому клиенту

    Не упустите шанс повысить видимость своего сайта и привлечь новых клиентов! Обращайтесь к нам и получите бесплатную консультацию.

    Свяжитесь с нами прямо сейчас и узнайте, как мы можем помочь вашему бизнесу вырасти! узнайте все подробности можно ====>>> ЗДЕСЬ

    Ответить
  6. mohamme abdrabu

    Очень отличная и интересная тема, я думаю, что Python требует большого ума, спасибо, что разместили тему

    Ответить
    1. Егор Егоров автор

      пожалуйста!

      Ответить