Декораторы функций в Python | Kit 1 (введение)

| | | | | | | | | | |

Предыстория

Ниже приведены важные факты о функциях в Python, полезные для понимания функций декораторов.

  1. В Python мы можем определить функцию внутри другой функции.
  2. В Python функция может быть передана в качестве параметра другой функции (функция также может возвращать другую функцию).

# Программа Python для демонстрации того, что функция
# может быть определен внутри другой функции, а
функция # может быть передана в качестве параметра.


# Добавляет приветственное сообщение в строку

def messageWithWelcome ( str ):

< br>

# Вложенная функция

def addWelcome ( ):

return "Добро пожаловать"


# Возвращает конкатенацию addWelcome()

№ и улица

return addWelcome () + str


# Получить имя сайта, к которому добавлено приветствие

def сайт (имя_сайта):

return site_name


print messageWithWelcome (site ( "GeeksforGeeks" ))

Вывод:

Добро пожаловать в Python.Engineering 

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

Мы используем @func_name, чтобы указать декоратор, который будет применяться к другой функции.


# Добавляет приветственное сообщение в строку
# возвращается fun(). Развлекайтесь () как
# параметр и возвращайте приветствие ().

def decor_message (забавно):


# Вложенная функция

def addWelcome (site_name):

return " Добро пожаловать в " + fun (site_name)


# Функция возврата декоратора

return addWelcome


@ decor_message

def site (site_name):

return site_name;


# Код драйвера


# Этот вызов эквивалентно вызову
#decorate_message() с функцией
#site("Python.Engineering ") в качестве параметра

print site( "GeeksforGeeks" )

Вывод:

Добро пожаловать to Python.Engineering 

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


# Пример Python, демонстрирующий, что
# Декораторы могут быть полезны для прикрепления данных


# Функция-декоратор для прикрепления
# данные для функций

def attach_data (func):

func.data = 3

return func


@ attach_data

def добавить (x, y):

return x + y


# Код драйвера


# Этот вызов эквивалентен attach_data()
# с добавлением () как параметр

print (добавить ( 2 , 3 ))


print (add.data)

Вывод:

5 3 

add() возвращает сумму аргументов x и y, переданных в качестве аргументов, но обернут в функцию декоратора, вызов add (2, 3) просто даст сумму двух чисел, но когда мы вызываем add.data, функция добавления затем передается функции декоратора ' прикрепить_данные ' в качестве аргумента, и эта функция возвращает функцию ' добавить ' с атрибутом ' данные ' установлено значение 3, и поэтому оно печатается.

Декораторы Python — это мощный инструмент для устранения избыточности.

Подробнее см. в