В Python декораторы (decorators) — это мощный инструмент, позволяющий изменять поведение функций и классов без необходимости изменять их исходный код. Декораторы позволяют добавить дополнительную функциональность к уже существующим объектам, делая код более читаемым и модульным.
Декораторы в Python являются функциями, которые принимают в качестве аргумента другую функцию и возвращают новую функцию. В простейшем случае, декоратор может использоваться для добавления дополнительной логики до или после выполнения функции, без необходимости изменения самой функции.
Рассмотрим пример декоратора, который замеряет время выполнения функции:
«`
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
execution_time = end_time — start_time
print(f»Функция {func.__name__} выполнилась за {execution_time} секунд»)
return result
return wrapper
@timer_decorator
def my_function():
time.sleep(2)
print(«Выполнение функции my_function»)
my_function()
«`
В данном примере мы определили декоратор `timer_decorator`, который принимает функцию `func` в качестве аргумента. Декоратор создает внутри себя новую функцию `wrapper`, которая выполняет измерение времени выполнения и вызывает оригинальную функцию `func`. Затем декоратор возвращает новую функцию `wrapper`.
Обратите внимание на использование символа `@` перед объявлением функции `my_function`. Это синтаксический сахар, позволяющий применить декоратор к функции при ее объявлении. То есть, функция `my_function` будет автоматически обернута декоратором `timer_decorator`.
При выполнении кода мы увидим следующий вывод:
«`
Выполнение функции my_function
Функция my_function выполнилась за 2.003849983215332 секунд
«`
Таким образом, мы успешно создали и применили декоратор в Python. Декораторы могут быть очень полезными для реализации различных задач, таких как логгирование, кэширование, валидация и многих других. Благодаря декораторам код становится более элегантным и поддерживаемым.