Курс 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"
- Работа с изменяемыми коллекциями
- Транспонирование матрицы
- Форматирование объектов с модулем pprint
- Оптимизация сравнения в Python
- Синтаксис переменных цикла в Python
- Поиск наиболее частого элемента в списке
- Возврат нескольких значений
- Непрерывная проверка в Python
- Создание функций высшего порядка
- discard() — удаление элемента из множества
- Поиск шаблона в строке
- Декораторы с аргументами
- Обратный список чисел
- %pinfo: получение информации об объекте
- Именованные срезы в Python
- Создание задания в Cron
- Переопределение метода
- Defaultdict в Python
- Howdoi — получение ответов из терминала
- Работа с индексами списков
- capitalize() — изменение регистра первого символа строки
- Конкатенация строк с join() в Python
- Распаковка аргументов в Python
- Сравнение def и lambda функций в Python
- Python reversed() vs срез[::-1]
- Форматирование чисел в Python
- Метод difference_update() — разность множеств
- Создание новых списков в Python
- Использование метода lower()
- Удаление дубликатов в pandas
- Поиск индекса элемента
- Оптимизация интернирования строк
- Сокращение ссылок с pyshorteners
- Работа с множествами в Python
- Лямбда-функции в defaultdict
- Область видимости переменных в Python
- Отступы в Python
- Переопределение метода __rshift__
- Декораторы с @wraps
- Преобразование регистра строк
- Строковое представление объектов
- Lambda-функция в Python: использование с map() и sum()
- Поиск уникальных элементов строкой в Python
- Списки в Python
- Сглаживание списка
- Удаление дубликатов с помощью множеств
- Переопределение метода __and__















