Курс Python → Управление контекстом с помощью декоратора contextmanager

Для создания объектов, поддерживающих выражение with, можно использовать декоратор contextmanager. Этот способ управления контекстом более удобный и понятный, чем использование методов __enter__ и __exit__. При использовании декоратора contextmanager необходимо определить функцию, которая будет являться менеджером контекста.

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


from contextlib import contextmanager

@contextmanager
def tag(name):
    print(f'')
    yield
    print(f'')

with tag('div'):
    print('Hello, World!')

В данном примере функция tag используется как менеджер контекста для создания HTML-тегов. При входе в блок with будет выведен открывающий тег <div>, затем будет выведено сообщение Hello, World!, а при выходе из блока будет выведен закрывающий тег </div>.

Использование декоратора contextmanager позволяет упростить работу с контекстными менеджерами и сделать код более читаемым. Этот подход особенно удобен при работе с ресурсами, которые должны быть корректно открыты и закрыты, такими как файлы или сетевые соединения.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Изменение элемента списка
  2. Измерение времени выполнения
  3. Склеивание строк без циклов
  4. Проблемы с dict в Python
  5. Логирование с Logzero
  6. Утечки переменных цикла в Python 3.x
  7. Функция с **kwargs в Python
  8. Замыкания в Python
  9. Установка Python3.7 и PIP
  10. Работа с временем в Python
  11. Функция zip() в Python
  12. Поиск всех индексов подстроки
  13. Метод matmul для умножения матриц
  14. Python: отсутствие точек с запятыми
  15. Принципы программирования
  16. Переопределение метода delitem в Python
  17. Транспонирование 2D-массива с помощью zip
  18. Обработка ошибок в JSON данных
  19. Добавление элемента в список.
  20. Управление виртуальными средами в Python
  21. Работа с необработанными строками
  22. Преобразование в float
  23. Метод rmatmul для обратного матричного умножения
  24. Генераторы по генератору
  25. Работа с итераторами в Python
  26. Основы работы со строками в Python
  27. Работа с процессами в Python
  28. JMESPath в Python
  29. Установка переменной среды в Python
  30. Обмен значений переменных в Python
  31. Оператор in для проверки наличия элемента
  32. Операция += для списков
  33. Открытие, чтение и закрытие файла
  34. Упрощение условных выражений с тернарным оператором
  35. Группы исключений в Python
  36. Оператор Walrus в Python 3.8
  37. Flask: создание веб-приложений
  38. Управление импортом в Python
  39. Работа с базами данных SQLite
  40. Объединение строк с помощью метода join
  41. Кортеж в Python: создание и использование
  42. Поиск простых чисел
  43. Работа с модулем random
  44. Функция divmod() в Python
  45. Профилирование с Pandas
  46. Подсчет элементов в Python
  47. Упрощение работы с JSON-данными в Python
  48. Управление User-Agent в Python

Marketello читают маркетологи из крутых компаний