Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Декораторы Python

Декораторы Python

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

Видео:@Decorators в Python

Декораторы в Python

В Python есть интересная функция, которая называется декораторы. для добавления функциональности к существующему коду.

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

<час>

Предпосылки для изучения декораторов

Чтобы понять декораторы, мы должны сначала узнать несколько основных вещей в Python.

Нам должно быть комфортно с тем фактом, что все в Python (да! Даже классы) является объектами. Имена, которые мы определяем, являются просто идентификаторами, привязанными к этим объектам. Функции не являются исключением, они тоже объекты (с атрибутами). К одному и тому же функциональному объекту могут быть привязаны разные имена.

Вот пример.

06

Вывод

15 

При запуске кода обе функции 07 и 16 дать тот же результат. Здесь имена 20 и 35 относятся к одному и тому же функциональному объекту.

Теперь все становится еще более странным.

Функции можно передавать в качестве аргументов другой функции.

Если вы использовали такие функции, как 49 , 50 и 60 в Python, то вы уже знаете об этом.

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

23

Мы вызываем функцию следующим образом.

37

Кроме того, функция может возвращать другую функцию.

45

Вывод

53

Здесь 72 это вложенная функция, которая определяется и возвращается каждый раз, когда мы вызываем 83 .

Наконец, мы должны знать о замыканиях в Python.

<час>

Возвращаясь к декораторам

Функции и методы называются вызываемыми. как их можно назвать.

Фактически, любой объект, который реализует специальный код 95 метод называется вызываемым. Итак, в самом общем смысле декоратор — это вызываемый объект, который возвращает вызываемый объект.

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

66

Когда вы запускаете следующие коды в оболочке,

78

В показанном выше примере 100 является декоратором. На этапе назначения:

85

Функция 110 был украшен, а возвращаемой функции было присвоено имя 122 .

Мы видим, что функция декоратора добавила некоторые новые функции к исходной функции. Это похоже на упаковку подарка. Декоратор действует как обертка. Характер украшенного предмета (настоящего подарка внутри) не меняется. Но теперь он выглядит красиво (поскольку его украсили).

Как правило, мы украшаем функцию и переназначаем ее как

95

Это обычная конструкция, и по этой причине в Python есть синтаксис, упрощающий ее.

Мы можем использовать 134 вместе с именем функции-декоратора и поместите его над определением декорируемой функции. Например,

102

эквивалентно

119

Это просто синтаксический сахар для реализации декораторов.

<час>

Украшение функций параметрами

Приведенный выше декоратор был простым и работал только с функциями, у которых не было параметров. Что, если бы у нас были функции, принимающие такие параметры, как:

125

Эта функция имеет два параметра:a и б . Мы знаем, что это выдаст ошибку, если мы передадим b как 0.

139

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

141

Эта новая реализация вернет 143. если возникает состояние ошибки.

154

Таким образом мы можем декорировать функции, принимающие параметры.

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

В Python эта магия выполняется как 161 . Таким образом, 175 будет кортеж позиционных аргументов и 189 будет словарем аргументов ключевого слова. Примером такого декоратора будет:

161
<час>

Сцепление декораторов в Python

В Python можно объединить несколько декораторов.

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

174

Вывод

181

Приведенный выше синтаксис,

192

эквивалентно

207

Порядок, в котором мы цепляем декораторы, имеет значение. Если бы мы изменили порядок как,

215

Результат будет таким:

224

Python

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Анонимная/лямбда-функция Python
  6. Лямбда-функции Python с ПРИМЕРАМИ
  7. Функция abs() в Python:примеры абсолютных значений
  8. Функция Python round() с ПРИМЕРАМИ
  9. Функции Python range():Float, List, For loop Примеры
  10. Функция Python map() с ПРИМЕРАМИ