Курс 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. Работа с итераторами в Python
  2. Основы слова
  3. Python: Splat-оператор и splatty-splat
  4. Управление ресурсами с контекстными менеджерами
  5. Расширение информации об ошибке в Python
  6. Оператор деления для класса Rational
  7. Генераторы списков в Python
  8. Секреты Python
  9. Руководство по использованию Colorama
  10. Вывод с переменной через запятую
  11. Автоматизация с Python
  12. Генераторы в Python
  13. Модуль math: константы π и e
  14. Динамическая типизация в Python
  15. Инициализация переменных
  16. Генерация UUID в Python
  17. Оформление текста в консоли с TermColor
  18. Форматирование кода на Python
  19. ChainMap.new_child() — добавление нового словаря
  20. Курс Data Scientist в медицине
  21. Метод rlshift для битового сдвига
  22. Преобразование кортежа в словарь.
  23. Поиск с помощью регулярных выражений
  24. Concrete Paths в Python
  25. Закрытие файла в Python
  26. Отделение звука от видео
  27. Поиск шаблона в строке
  28. Сортировка данных в Python
  29. Поиск индекса элемента
  30. Генерация случайных чисел в Python
  31. Функция zip() в Python
  32. Управление фоновыми задачами в Python
  33. Многострочные комментарии в Python
  34. Нахождение максимального значения и его индекса в списке
  35. Справка по импортированным модулям
  36. Объединение множеств в Python
  37. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  38. Установка и использование модуля «howdoi»
  39. Форматирование строк с f-строками
  40. Вложенные генераторы в Python
  41. Добавление Progressbar в Python
  42. Объединение списков с использованием itertools.chain
  43. Асинхронное программирование с asyncio
  44. Python OrderedDict и fromkeys() — работа с словарями
  45. Конвертация текстовых чисел с помощью Numerizer
  46. Создание функций высшего порядка
  47. Переименование файлов в Python
  48. Функциональное программирование в Python

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