Декораторы в Python — это мощный инструмент, который позволяет модифицировать поведение функций или классов без изменения их кода. Они представляют собой функции высшего порядка, то есть функции, которые принимают другие функции в качестве аргументов и возвращают новые функции. В Python декораторы обычно применяются с помощью синтаксиса @decorator
перед определением функции или класса.
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Как создать декоратор
Создание декоратора в Python происходит в несколько этапов. Рассмотрим пример создания простого декоратора, который выводит информацию о вызове функции:
- Определите функцию-декоратор, которая принимает в качестве аргумента другую функцию:
def my_decorator(func): ...
- Внутри функции-декоратора определите новую функцию (обычно называемую «wrapper» или «обертка»), которая будет выполнять дополнительные действия перед и/или после вызова исходной функции:
def my_decorator(func): def wrapper(): print("Что-то происходит перед вызовом функции") func() print("Что-то происходит после вызова функции") return wrapper
- Верните из функции-декоратора новую функцию-обертку:
def my_decorator(func): def wrapper(): ... return wrapper
- Теперь можно применить созданный декоратор к любой функции с помощью синтаксиса
@decorator
:
@my_decorator def say_hello(): print("Привет, мир!") say_hello()
В результате выполнения кода мы увидим следующий вывод:
Что-то происходит перед вызовом функции
Привет, мир!
Что-то происходит после вызова функции
Пример использования декоратора
Рассмотрим пример использования декоратора для измерения времени выполнения функции:
import time def timing_decorator(func): def wrapper(): start_time = time.time() func() end_time = time.time() print(f"Функция {func.__name__} выполнялась {end_time - start_time:.2f} секунд") return wrapper @timing_decorator def some_long_running_function(): time.sleep(2) print("Функция завершила работу") some_long_running_function()
В данном примере декоратор timing_decorator
измеряет время выполнения функции some_long_running_function
и выводит результат на экран.
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
Заключение
Декораторы в Python — это удобный способ добавления нового поведения к функциям или классам без изменения их кода. Они используются для решения множества задач, таких как логирование, кеширование, проверка прав доступа и других. Важно понимать основы работы с декораторами, чтобы эффективно использовать их в своих проектах. Освоив принципы работы с декораторами, вы сможете значительно улучшить структуру своего кода и упростить его поддержку. 😊
Добавить комментарий