Декораторы в Python представляют собой мощный инструмент, позволяющий изменить поведение функции или метода без изменения его исходного кода. Основная задача декораторов – это добавление новых функциональностей к существующим объектам без модификации их структуры.
Пример использования декораторов
Рассмотрим пример, где используется декоратор для подсчета времени выполнения функции.
import time def timer_decorator(function): def wrapper(): start_time = time.time() function() end_time = time.time() print(f"Время выполнения функции: {end_time-start_time} секунд") return wrapper @timer_decorator def some_function(): time.sleep(2) some_function()
В данном примере создан декоратор timer_decorator
, который замеряет время выполнения функции. Функция some_function
декорирована этим декоратором, что позволяет замерить ее время выполнения без изменения исходного кода функции.
Создание декораторов
Создание декоратора включает в себя определение функции, которая принимает другую функцию в качестве аргумента. Внутри этой функции определяется вложенная функция (часто называемая «оберткой» или «wrapper»), которая содержит код, который будет выполняться до и после вызова переданной функции.
def decorator(function): def wrapper(): print("Код перед вызовом функции") function() print("Код после вызова функции") return wrapper
Объединение декораторов
Декораторы могут быть объединены для создания сложного поведения. Это достигается путем применения нескольких декораторов к одной функции. Порядок применения декораторов важен: декоратор, который указан первым, будет применен последним.
@decorator1 @decorator2 def function(): pass
В этом примере сначала к функции применяется decorator2
, затем результат оборачивается decorator1
.
Подводя итог, можно сказать, что Python предлагает мощные возможности для модификации поведения функций и методов с помощью декораторов. Это позволяет добавлять функциональность к существующим объектам без изменения их структуры, что делает код более чистым и понятным.
Добавить комментарий