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

PY в 5: декораторы

Что такое декораторы и почему мне все равно?. Помечено с Python, программированием, обсуждением, INDALTOCODE.

Первоначально опубликовано в блоге кодирования утки: www.ccstechme.com/coding-duck-blog

Привет всем и добро пожаловать в другой PY в 5 обсуждении. Серия статьи, где я принимаю концепцию программирования Python и попытаться объяснить ее в человеческих терминах в 5 минутах чтения или меньше. Наша тема сегодня: декораторы!

Как наш обычай, давайте получим официальное определение декораторов:

pythontips.com:

Функции, которые изменяют функциональные возможности других функций

python.org:

Функция, возвращающая другую функцию, применяемую в виде трансформации функции с использованием синтаксиса @wrapper

Хорошо, так что я слышу …. Функции. Функции, которые принимают функцию для возврата функции, чтобы ваше приложение функционирует функционально. И использованная парадигма программирования? Объект ориентирован … Очевидно,.

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

В действительно абстрагированном смысле думайте о декораторах как своего рода инкапсуляции, но на уровне функций, а не на уровне класса. Также как классы в Python позволяют инкапсулировать свои свойства, декораторы позволяют этой концепции ООП внутри функций. Как будто вы вроде, когда вы импортируете класс в свой файл Python, давайте скажем сообщение «Time» модуль и создать экземпляр (или создать экземпляр) время класс. И, давайте скажем, вы хотели сообщить вашу программу, чтобы подождать 10 секунд, прежде чем продолжить. Для этого вы бы написали time.sleep (10) . То, что вы в основном делаете здесь, используют инкапсуляцию. Функция «сна» инкапсулирована (или прилагается) в момент времени.

Подумайте об этом, как будто у вас был другом, вы спите, вы хотели играть с детским ребенком. Вы бы пошли к своему дому, звоните в колокол, а его папа отвести на дверь. ” Привет! Может спать выйти и играть? «Вы бы спросили время.

“Конечно!” Он ответил, – позволь мне пойти за тобой. Тогда сон выйдет, и вы бы поехали, имели веселое старое время для себя. Декоратор предоставляет аналогичную функциональность, но, а не инкапсулирующую функции, он инкапсулирует контекст. Любая функция, которая называется декоратором, получает доступ к контексту (материал, который происходит до и после выполнения функций, которые влияют на функцию, как она работает), которая является уникальной для этого декоратора. Вид, как ваши родители (класс) будут иметь определенный способ, которым вам нужно вести себя в общем смысле. Но когда ваш дядя (декоратор) займет вас, чтобы сделать вещи, ваше поведение будет отлично, чем дома. Что от вас ожидалось, и, следовательно, как вы действовали, отличались, пока вы находились под временной заботой о другом родственнике, чем ваши родители.

Например, позволяет взглянуть на несколько декораторов, которые меняют поведение HTML-формы. Форма написана следующим образом и отображается в веб-структуре Flask:

@app.route('/')
def styling():
    return '''
            
Username:
Password:
'''

и оказывает, как это

Теперь давайте добавим следующие декораторы в смесь:

def style_with_flex_end(func):
    def func_wrapper():
        return '''
{0}
'''.format(func()) return func_wrapper def style_with_flex_center(func): def func_wrapper(): return '''
{0}
'''.format(func()) return func_wrapper

Обе декораторы делают подобные вещи. Единственная разница между ними – это тег стиля оправдания-контента. Однако, просто давая вышеупомянутую HTML форму контекст Эти декораторы применяются, мы получаем другой результат. Давайте прикрепим style_with_flex_end Декоратор к этой колбу маршруту просто позвонив ему с помощью символа «@» и в скобках выше определения функции «стиль».

@app.route('/')
@style_with_flex_end
def styling():
    return '''
            
Username:
Password:
'''

Добавление декоратора оказывает такую же форму, как это:

Как видите, Обоснование-контент: Flex-End; Контекст, предоставляемый декоратором, изменился, где форма появилась на странице, без необходимости изменять сам код формы. То же самое можно сделать с нашим другим декоратором:

@app.route('/')
@style_with_flex_center
def styling():
    return '''
            
Username:
Password:
'''

который затем делает следующим образом:

Таким образом, в резюме декоратор добавляет контекст к функции. В принципе, в основном дает вашу функцию «разрешение» для использования дополнительной одежды в окне, который обеспечивает декоратор. Наш пример показывает, что если мы спросим @style_with ... Декораторы, если стиль оправдания, который они реализуют, могут «выйти на игру», они дадут нашему HTML другой набор ожиданий, чем когда они «дома с мамой и папой», поэтому позволяя им вести себя иначе, чем обычно, Отказ

Для более глубокого погружения в декораторы, проверьте этот пост, который был доведен до моего внимания @rrampage (Большое спасибо за обмен, Раунак), которые можно найти здесь

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

Оригинал: “https://dev.to/kaelscion/py-in-5-decorators-14k6”