← Назад ко всем вопросам

Что такое декоратор?

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

Зачем нужны декораторы?

  1. Повторное использование кода: Декораторы позволяют добавлять одну и ту же функциональность к нескольким функциям без дублирования кода.
  2. Разделение ответственности: Они помогают отделить дополнительную функциональность от основной логики функции.
  3. Улучшение читаемости: Код становится более понятным и структурированным.

Как работают декораторы?

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

Пример декоратора

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

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()

Объяснение кода

  1. Импорт модуля time: Используется для измерения времени выполнения функции.
  2. Определение timing_decorator: Это функция-декоратор, которая принимает функцию func в качестве аргумента.
  3. Внутренняя функция wrapper: Она принимает любые аргументы и ключевые аргументы, которые могут быть переданы в оригинальную функцию.
  4. Измерение времени: start_time и end_time используются для измерения времени выполнения функции.
  5. Вызов оригинальной функции: func(*args, **kwargs) вызывает оригинальную функцию с переданными аргументами.
  6. Вывод времени выполнения: print(f"Время выполнения: {end_time - start_time} секунд") выводит время, затраченное на выполнение функции.
  7. Возврат результата: return result возвращает результат выполнения оригинальной функции.
  8. Использование декоратора: @timing_decorator применяется к example_function, добавляя к ней функциональность измерения времени выполнения.

Тема: Python
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки