Что такое декоратор в Python? Узнай всю суть!

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

Пример:

@decorator
def my_function():
    # код функции
    pass

В приведенном примере @decorator - это декоратор, который применяется к функции my_function. Декоратор может выполнять различные действия, такие как логирование, кэширование, аутентификацию и т. д.

Декораторы могут принимать аргументы:

@decorator(arg1, arg2)
def my_function():
    # код функции
    pass

Как и в первом примере, декоратор @decorator применяется к функции my_function, но с аргументами arg1 и arg2.

Детальный ответ

Декоратор - это что в Python?

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

Рассмотрим пример, чтобы лучше понять, что такое декоратор в Python. Предположим, у нас есть функция say_hello(), которая просто выводит приветствие на экран:


def say_hello():
    print("Привет, мир!")

Теперь допустим, нам нужно добавить дополнительную функциональность к этой функции, например, логирование каждого вызова функции. Вместо того, чтобы изменять код самой функции say_hello(), мы можем использовать декоратор, чтобы добавить логирование:


def logger_decorator(func):
    def wrapped():
        print("Вызвана функция:", func.__name__)
        func()
    return wrapped

@logger_decorator
def say_hello():
    print("Привет, мир!")

В приведенном выше примере мы определяем функцию-декоратор logger_decorator() с аргументом func. Внутри нее мы определяем новую функцию wrapped(), которая выводит сообщение о вызове функции и затем вызывает исходную функцию func(). Затем мы используем декоратор @logger_decorator перед функцией say_hello(), чтобы применить декоратор к этой функции.

Теперь, когда мы вызываем функцию say_hello(), будет выводиться сообщение о вызове функции:


say_hello()
# Output:
# Вызвана функция: say_hello
# Привет, мир!

Как видите, декоратор logger_decorator() добавил логирование к функции say_hello() без изменения кода самой функции. Это дает нам гибкость изменять поведение функций, не затрагивая их исходный код.

Декораторы в Python также могут принимать аргументы и даже быть стеком из нескольких декораторов. Например, мы можем создать новый декоратор uppercase_decorator(), который будет преобразовывать вывод в верхний регистр:


def uppercase_decorator(func):
    def wrapped():
        result = func()
        return result.upper()
    return wrapped

@logger_decorator
@uppercase_decorator
def say_hello():
    return "Привет, мир!"

say_hello()
# Output:
# Вызвана функция: wrapped
# ПРИВЕТ, МИР!

В приведенном выше примере мы определяем новый декоратор uppercase_decorator(), который преобразует результат функции в верхний регистр. Затем мы применяем оба декоратора, logger_decorator и uppercase_decorator, к функции say_hello(). При вызове say_hello() сначала выполняется декоратор uppercase_decorator, а затем декоратор logger_decorator.

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

Видео по теме

Декораторы Python на простых примерах

Декораторы в Python Часть 1. Decorator Python

Python с нуля. Урок 19 | Декораторы функций

Похожие статьи:

🔧 Как создать язык программирования в Python? 🐍

Как переустановить Python пакет: подробное руководство с 🔄🐍

🔴 Как округлить число в Питоне через формат: пошаговое руководство для начинающих

Что такое декоратор в Python? Узнай всю суть!

стиллер python что это - полное объяснение и использование

🔍 Как печатать с новой строки в Python: простой способ для начинающих!

Как посчитать дни между датами в питоне? 📅🔢