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

Что возвращает декоратор?

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

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

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

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

Зачем это нужно

Декораторы позволяют:

  • Легко добавлять функциональность к функциям или методам.
  • Избегать дублирования кода.
  • Разделять логику программы на более мелкие и управляемые части.
  • Улучшать читаемость и поддержку кода.

Как это работает

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

Пример

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

def my_decorator(func):
    # Определяем внутреннюю функцию, которая будет оборачивать оригинальную функцию
    def wrapper():
        print("Начало выполнения функции.")
        # Вызываем оригинальную функцию
        func()
        print("Завершение выполнения функции.")
    # Возвращаем внутреннюю функцию
    return wrapper
​
# Используем декоратор для функции
@my_decorator
def say_hello():
    print("Привет, мир!")
​
# Вызываем декорированную функцию
say_hello()

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

  1. Определение декоратора: my_decorator — это функция, которая принимает другую функцию func в качестве аргумента.

  2. Внутренняя функция wrapper: Внутри my_decorator мы определяем функцию wrapper, которая добавляет дополнительное поведение. Она выводит сообщение перед и после вызова func.

  3. Возврат wrapper: my_decorator возвращает функцию wrapper, которая заменяет оригинальную функцию say_hello.

  4. Использование декоратора: С помощью синтаксиса @my_decorator мы применяем декоратор к функции say_hello. Это эквивалентно say_hello = my_decorator(say_hello).

  5. Вызов декорированной функции: Когда мы вызываем say_hello(), на самом деле вызывается wrapper, которая сначала выводит "Начало выполнения функции.", затем вызывает оригинальную say_hello, и наконец выводит "Завершение выполнения функции."

Применение

Декораторы широко используются для:

  • Логирования
  • Управления доступом и аутентификации
  • Кэширования
  • Измерения времени выполнения функций

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

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

Твои заметки