Что такое декоратор?
1️⃣ Как кратко ответить
Декоратор в Python — это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию с расширенной функциональностью. Используется для модификации поведения функций или методов без изменения их исходного кода.
2️⃣ Подробное объяснение темы
Декораторы в Python — это мощный инструмент, который позволяет изменять или расширять поведение функций или методов. Они позволяют добавлять дополнительную функциональность к существующим функциям без изменения их исходного кода. Это особенно полезно для повторного использования кода и улучшения его читаемости.
Зачем нужны декораторы?
- Повторное использование кода: Декораторы позволяют добавлять одну и ту же функциональность к нескольким функциям без дублирования кода.
- Разделение ответственности: Они помогают отделить дополнительную функциональность от основной логики функции.
- Улучшение читаемости: Код становится более понятным и структурированным.
Как работают декораторы?
Декоратор — это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию. Эта новая функция обычно вызывает оригинальную функцию и добавляет к ней дополнительную функциональность.
Пример декоратора
Рассмотрим простой пример декоратора, который выводит время выполнения функции:
import time
def timing_decorator(func):
# Декоратор принимает функцию `func` в качестве аргумента
def wrapper(*args, **kwargs):
# Внутренняя функция `wrapper` принимает любые аргументы
start_time = time.time() # Записываем текущее время
result = func(*args, **kwargs) # Вызываем оригинальную функцию
end_time = time.time() # Записываем время после выполнения функции
print(f"Время выполнения: {end_time - start_time} секунд") # Выводим разницу во времени
return result # Возвращаем результат выполнения оригинальной функции
return wrapper # Возвращаем внутреннюю функцию `wrapper`
@timing_decorator
def example_function():
# Пример функции, к которой применяется декоратор
time.sleep(2) # Имитация длительной операции
print("Функция выполнена")
# Вызов функции с декоратором
example_function()
Объяснение кода
- Импорт модуля
time: Используется для измерения времени выполнения функции. - Определение
timing_decorator: Это функция-декоратор, которая принимает функциюfuncв качестве аргумента. - Внутренняя функция
wrapper: Она принимает любые аргументы и ключевые аргументы, которые могут быть переданы в оригинальную функцию. - Измерение времени:
start_timeиend_timeиспользуются для измерения времени выполнения функции. - Вызов оригинальной функции:
func(*args, **kwargs)вызывает оригинальную функцию с переданными аргументами. - Вывод времени выполнения:
print(f"Время выполнения: {end_time - start_time} секунд")выводит время, затраченное на выполнение функции. - Возврат результата:
return resultвозвращает результат выполнения оригинальной функции. - Использование декоратора:
@timing_decoratorприменяется кexample_function, добавляя к ней функциональность измерения времени выполнения.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться