Что такое декоратор функции Python: основы и примеры использования

Что такое декоратор функции в Python?

Декоратор функции в Python - это особая конструкция, которая позволяет изменять поведение функции, не изменяя ее саму.

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

Вот пример, чтобы проиллюстрировать:


def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        # Дополнительный код до выполнения функции
        result = original_function(*args, **kwargs)
        # Дополнительный код после выполнения функции
        return result
    return wrapper_function

@decorator_function
def my_function():
    print("Привет, я функция!")

my_function()

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

Затем мы используем символ @, чтобы применить декоратор к нашей функции. Теперь, когда мы вызываем my_function(), она будет выполняться с дополнительным кодом, добавленным благодаря декоратору.

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

Детальный ответ

Что такое декоратор функции в Python?

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

Основная идея декораторов заключается в том, чтобы обернуть функцию в другую функцию, называемую "декоратором", которая расширяет или изменяет поведение целевой функции. Для создания декораторов в Python используются функции высшего порядка. Функции высшего порядка - это функции, которые могут принимать другие функции в качестве аргументов или возвращать их в качестве результата.

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


def uppercase_decorator(func):
    def wrapper():
        result = func().upper()
        return result
    return wrapper

@uppercase_decorator
def greeting():
    return "Привет, мир!"

print(greeting())

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

Аннотация @uppercase_decorator перед функцией greeting указывает, что мы хотим применить наш декоратор к этой функции. Когда мы вызываем greeting(), декоратор uppercase_decorator автоматически оборачивает вызов функции и преобразует результат в верхний регистр.

Параметризованный декоратор функции

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


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper():
            for _ in range(num_times):
                func()
        return wrapper
    return decorator_repeat

@repeat(num_times=3)
def greet():
    print("Привет!")

greet()

В этом примере у нас есть две функции: repeat и greet. Функция repeat принимает параметр num_times и возвращает декоратор decorator_repeat. Декоратор decorator_repeat берет функцию func в качестве аргумента и оборачивает ее в цикл, повторяющийся num_times раз.

Аннотация @repeat(num_times=3) перед функцией greet указывает, что мы хотим применить наш декоратор с параметром num_times=3 к этой функции. Когда мы вызываем greet(), декоратор repeat оборачивает вызов функции и повторяет его три раза.

Множественные декораторы

В Python можно применять несколько декораторов к одной функции. Это позволяет применять различные декораторы для разных аспектов поведения функции.


def bold_decorator(func):
    def wrapper():
        result = "<b>" + func() + "</b>"
        return result
    return wrapper

def uppercase_decorator(func):
    def wrapper():
        result = func().upper()
        return result
    return wrapper

@bold_decorator
@uppercase_decorator
def greeting():
    return "Привет, мир!"

print(greeting())

В этом примере у нас есть две функции-декоратора: bold_decorator и uppercase_decorator. Аннотации @bold_decorator и @uppercase_decorator перед функцией greeting указывают, что сначала нужно применить bold_decorator, а затем uppercase_decorator к этой функции. Результатом вызова greeting() будет строка, заключенная в теги <b> и преобразованная в верхний регистр.

Заключение

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

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

Видео по теме

Декораторы в Python Часть 1. Decorator Python

Python с нуля. Урок 19 | Декораторы функций

#45. Введение в декораторы функций | Python для начинающих

Похожие статьи:

Как использовать цикл for в Python для повторения действий?

🧠как создать викторину на python: подробный гайд для начинающих🐍

Как вывести сложение в питоне: простая инструкция с эмодзи 😄

Что такое декоратор функции Python: основы и примеры использования

Как вывести часть слова python: легкий способ для начинающих 🐍

Как разбить текст на слова в Python с помощью emoji 📚✂️🐍

🔎 Как узнать, где установлен Python? Быстрый и простой способ