Курс Python → Управление ресурсами в Python

Контекстные менеджеры в Python предоставляют удобный способ управления ресурсами, такими как файлы, сокеты или соединения с базой данных. Они позволяют нам гарантировать, что ресурсы будут корректно закрыты после завершения работы с ними, даже в случае возникновения исключения. Для создания контекстного менеджера нам нужно определить класс с методами __enter__ и __exit__, которые будут вызываться при входе и выходе из контекста соответственно.


class FileHandler:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

В приведенном выше примере класс FileHandler представляет собой контекстный менеджер для работы с файлами. При использовании оператора «with» экземпляр этого класса будет автоматически открывать файл при входе в контекст и закрывать его при выходе из контекста. Это гарантирует, что ресурсы будут освобождены правильно, даже если в процессе обработки файла возникнет исключение.

Для использования созданного контекстного менеджера достаточно просто обернуть блок кода, который работает с файлом, в оператор «with» и указать созданный экземпляр класса:


with FileHandler('example.txt', 'r') as file:
    for line in file:
        print(line)

В данном примере мы открываем файл ‘example.txt’ для чтения и выводим его содержимое построчно. После завершения работы с файлом он будет автоматически закрыт благодаря контекстному менеджеру. Таким образом, использование контекстных менеджеров в Python позволяет нам писать более безопасный и чистый код, обеспечивая правильное управление ресурсами.

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

Автор урока

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

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

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

  1. Функция sleep() в Python
  2. Работа с enumerate()
  3. Инициализация переменных
  4. globals и locals
  5. Работа с OpenCV
  6. GitHub в Telegram: подписка на уведомления
  7. Метод сравнения объектов в Python
  8. Сортировка и обратный порядок
  9. Оптимизация сравнения в Python
  10. Работа с путями в Python
  11. Работа с индексами списков
  12. Профилирование с Pandas
  13. Вложенные функции в Python
  14. Принципы Zen of Python
  15. Частичное совпадение ввода
  16. Метод append() для списка
  17. Создание коллекций из генератора
  18. Обязательные аргументы в Python
  19. Официальный канал Python в Telegram
  20. Декораторы с аргументами в Python
  21. CLI-инструмент howdoi
  22. Распаковка элементов последовательности
  23. Замеры производительности в Python
  24. Работа с модулем os в Python
  25. Функция rsplit() в Python
  26. Нахождение хеша для бесконечности и NaN в Python
  27. Выключение компьютера с помощью Python
  28. Оптимизация памяти с __slots__
  29. Роль object и type в Python
  30. Изменение IP-адреса в Python
  31. Упрощение работы с JSON-данными в Python
  32. Генераторы списков
  33. Работа с географическими данными в Python
  34. Howdoi — получение ответов из терминала
  35. *args и **kwargs в Python
  36. Обновление ключей в Python
  37. Многострочные комментарии в Python
  38. Возврат нескольких значений из функции
  39. Преобразование данных в Python
  40. Параллельные вычисления в Python
  41. Форматирование чисел в Python
  42. Оператор умножения для вектора
  43. Регистрация на курсы SF Education
  44. Просмотр внешнего файла в Python
  45. Работа с геоданными с помощью geopy
  46. Метод pop() списка

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