Используйте декораторы Python 🐍

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

Декораторы!

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

Итак... что такое декораторы?

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

Как это использовать?

Декоратор применяется к функции или классу путем размещения символа «@», за которым следует имя функции декоратора перед определением функции или класса.

Вот пример простого декоратора, добавляющего функцию логирования в функцию:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print("Calling function:", func.__name__)
        result = func(*args, **kwargs)
        print("Function returned:", result)
        return result
    return wrapper

@log_decorator
def my_function(x, y):
    return x + y

my_function(1, 2)

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

Вывод этого кода будет:

Calling function: my_function
Function returned: 3

Строка @log_decorator перед определением my_function указывает Python применить функцию log_decorator к my_function. Поэтому, когда вызывается my_function, на самом деле вызывается функция-оболочка, которая, в свою очередь, вызывает my_function и добавляет функциональность ведения журнала.

Декораторы дозы могут получать значения?

Да! Вы также можете очень легко передавать аргументы декораторам.

def repeat(num):
    def repeat_decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(num):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return repeat_decorator

@repeat(num=3)
def my_function(x):
    return x * x

print(my_function(3))

Этот код выведет «81», так как функция my_function украшена Repeat_decorator, который запускает функцию my_function 3 раза.

Помнить?

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

Удачи, Шайло