Что делает декоратор python? 🐍 Узнайте все о роли декораторов в Python

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

Вот пример декоратора, который замеряет время выполнения функции:


def measure_time(func):
    def wrapper(*args, **kwargs):
        import time
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print("Время выполнения:", end_time - start_time)
        return result
    return wrapper

@measure_time
def some_function():
    # Код функции
    pass

some_function()
    

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

Декоратор Python: что делает

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

Теперь мы рассмотрим пример декоратора, который дополняет функцию приветствия:


def decorator(func):
    def wrapper():
        print("До вызова функции")
        func()
        print("После вызова функции")
    return wrapper

@decorator
def say_hello():
    print("Привет!")
    
say_hello()
    

Когда мы вызываем функцию say_hello(), происходит следующее:

  1. Декоратор decorator получает функцию say_hello в качестве аргумента.
  2. Декоратор создает новую функцию wrapper, которая содержит дополнительный код.
  3. Декоратор возвращает функцию wrapper.
  4. Затем вызывается функция wrapper, которая выводит сообщение "До вызова функции", затем вызывает исходную функцию say_hello, а затем выводит сообщение "После вызова функции".

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

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


def repeat(n):
    def decorator(func):
        def wrapper():
            for _ in range(n):
                func()
        return wrapper
    return decorator

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

В этом примере декоратор repeat принимает аргумент 3. Затем вы получаете декоратор decorator, который возвращает функцию wrapper, которая выполняет функцию n раз. Затем мы применяем декоратор repeat к функции say_hello, чтобы она вызывалась трижды.

Наконец, применение декораторов может быть стековым, то есть мы можем применить несколько декораторов к одной функции. Рассмотрим следующий пример:


def uppercase(func):
    def wrapper():
        original_result = func()
        modified_result = original_result.upper()
        return modified_result
    return wrapper

def bold(func):
    def wrapper():
        original_result = func()
        modified_result = f"{original_result}"
        return modified_result
    return wrapper

@bold
@uppercase
def say_hello():
    return "Привет!"
    
print(say_hello())
    

В этом примере мы применяем декораторы uppercase и bold к функции say_hello. Декоратор uppercase приводит результат функции к верхнему регистру, а декоратор bold окружает результат жирным тегом. Результатом будет строка "Привет!", обернутая в жирный тег и в верхнем регистре.

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

Видео по теме

Декораторы Python на простых примерах

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

Декораторы Python | Разбираем Декораторы С Примерами Кода

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

Какие версии Python установлены: Полный гайд

📅 Как получить дату без времени в Python: простое руководство

🔥 Как удалить скобки в Python: простые способы и инструкция

Что делает декоратор python? 🐍 Узнайте все о роли декораторов в Python

Шаблон объекта в ООП в Питоне: Является ли его шаблоном? 🐍

📝 10 простых способов писать корень в питоне 🐍

🤖 Как написать своего телеграмм бота на python: пошаговое руководство