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

Что такое декораторы в Python

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

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

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

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

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

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

Пример использования декоратора

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

def my_decorator(func):
    def wrapper():
        print("Что-то происходит до вызова функции.")
        func()
        print("Что-то происходит после вызова функции.")
    return wrapper
​
def say_hello():
    print("Привет!")
​
# Применение декоратора
decorated_say_hello = my_decorator(say_hello)
​
# Вызов декорированной функции
decorated_say_hello()

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

  1. Функция my_decorator(func): Это декоратор, который принимает функцию func в качестве аргумента.

  2. Вложенная функция wrapper(): Это функция-обертка, которая добавляет дополнительное поведение. Она выводит сообщение до и после вызова оригинальной функции func.

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

  4. Функция say_hello(): Это простая функция, которая выводит "Привет!".

  5. Применение декоратора: Мы применяем декоратор к функции say_hello, создавая новую функцию decorated_say_hello.

  6. Вызов decorated_say_hello(): При вызове этой функции сначала выполняется код в wrapper, который оборачивает вызов say_hello.

Синтаксический сахар для декораторов

Python предоставляет специальный синтаксис для применения декораторов с помощью символа @. Это делает код более читаемым и удобным.

@my_decorator
def say_hello():
    print("Привет!")
​
say_hello()

Объяснение:

  • @my_decorator: Эта строка перед определением функции say_hello автоматически применяет декоратор my_decorator к функции say_hello.

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

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

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

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

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

Твои заметки