День 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 с нуля. Все предыдущие дни можно найти в указателе серий здесь.