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

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

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

import time

def timing_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        elapsed_time = end_time - start_time
        print(f"{func.__name__} took {elapsed_time:.2f} seconds to execute.")
        return result

    return wrapper

# Example usage:
@timing_decorator
def some_function(n):
    total = 0
    for i in range(n):
        total += i
    return total

result = some_function(10000000)

В этом примере мы определяем декоратор с именем timing_decorator, который измеряет время, необходимое для выполнения данной функции func. Мы используем синтаксис @timing_decorator, чтобы применить декоратор к some_function. Когда вызывается some_function(100000), он печатает время, затраченное на выполнение функции, и возвращает результат.