Курс 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. Безопасные SQL-запросы в Python 3.11
  2. Возврат нескольких значений
  3. Контекстный менеджер в Python
  4. Декоратор Property в Python
  5. Декоратор Ajax required
  6. Генераторы в Python
  7. Библиотека Emoji: использование смайлов в Python
  8. Определение имен функций
  9. Преобразование документов в PDF с помощью Spire.Office
  10. Функция product() из itertools
  11. Замеры производительности в Python
  12. Python 3.12: Псевдонимы типов
  13. Построение графиков в терминале с bashplotlib
  14. Работа с часовыми поясами в Python.
  15. Функция zip() в Python
  16. Defaultdict в Python
  17. Синхронизация доступа к ресурсам
  18. Мониторинг памяти с Pympler
  19. Создание панели меню Tkinter
  20. Получение списка кортежей из словаря
  21. Метод remove() для удаления элемента из списка
  22. Функции в Python
  23. Разделение строки с помощью split()
  24. Генераторы в Python
  25. Работа с JSON в Python
  26. Метод __index__ в Python
  27. Группировка элементов в словарь
  28. Определение наиболее частого элемента с помощью collections.Counter
  29. Непрерывная проверка в Python
  30. Обмен значений переменных в Python
  31. Работа с deque из collections
  32. Операции со строками в Python
  33. Добавление элементов в список: append() vs extend()
  34. Метод rsub для пользовательских чисел
  35. Python Менеджер контекста
  36. Декораторы с @wraps
  37. Функция findall() для поиска вхождений строки
  38. Просмотр внешнего файла в Python
  39. Проверка типа объекта в Python
  40. Работа с рекламными данными в Pandas
  41. Абстракции словарей и множеств в Python
  42. Бинарный поиск
  43. Настройка вывода в Numpy
  44. Работа с часовыми поясами в Python
  45. Структурирование именованных констант
  46. Вставка переменных в шаблоны Flask
  47. Управление мышью и клавиатурой с Pyautogui

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