День 28. Декораторы: изменение функций и методов

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

Введение в декораторы

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

Создание простого декоратора

Начнем с простого примера создания и использования декоратора:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

В этом примере функция my_decorator оборачивает функцию say_hello, что позволяет нам выполнять код до и после вызова функции.

Применение нескольких декораторов

Вы можете применить несколько декораторов к одной функции:

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

def exclamation_decorator(func):
    def wrapper():
        result = func()
        return result + "!"
    return wrapper

@exclamation_decorator
@uppercase_decorator
def greet():
    return "hello"

print(greet())  # Output: "HELLO!"

Декорирование функций аргументами

Если вы хотите украсить функции, принимающие аргументы, вы можете использовать синтаксис *args и **kwargs:

def arg_decorator(func):
    def wrapper(*args, **kwargs):
        print("Arguments:", args)
        func(*args, **kwargs)
    return wrapper

@arg_decorator
def print_info(name, age):
    print(f"Name: {name}, Age: {age}")

print_info("Alice", 30)

Заключение

Поздравляем с завершением 28-го дня нашего обучения Python! Сегодня мы рассмотрели декораторы, мощную концепцию изменения функций и методов. Мы научились создавать декораторы, применять несколько декораторов и украшать функции аргументами.

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

Продолжайте в том же духе, и увидимся завтра на 29-м дне! Удачного кодирования! 🚀

Примечание. Эта запись в блоге является частью 90-дневной серии курсов по основам программирования на Python с нуля. Все предыдущие дни можно найти в указателе серий здесь.