11.3. Контекстные менеджеры.

Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Самоучитель Python 3, собранный из материалов данного сайта. Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Контекстные менеджеры - это инструмент Python, который позволяет управлять контекстом выполнения определенного кода. Они используются для выполнения некоторых действий до и после выполнения блока кода или для обеспечения безопасного использования ресурсов.
 
Базовый синтаксис контекстных менеджеров
with <context_manager_expression> as <variable>:
    <body>
<context_manager_expression>: Это выражение, которое создает и возвращает объект контекстного менеджера. Этот объект управляет процессом, выполняемым внутри блока "with".
<variable>: Это переменная, в которую помещается объект контекстного менеджера, возвращенный <context_manager_expression>. Эта переменная может быть использована внутри блока "with" для взаимодействия с контекстным менеджером.
<body>: Это блок кода, который будет выполнен в контексте, управляемом объектом контекстного менеджера. - В этом блоке кода можно использовать переменную <variable> для взаимодействия с контекстным менеджером.
 
Пример использования контекстного менеджера для работы с файлами
# Открытие файла в контекстном менеджере
with open("example.txt", "r") as file:
    data = file.read()
    print(data)
# Файл автоматически закрывается после завершения блока with
 
Создание собственного контекстного менеджера:
class MyContextManager:
    def __enter__(self):
        print("Вход в контекст")
        return self
        
    def __exit__(self, exc_type, exc_value, traceback):
        print("Выход из контекста")

# Использование собственного контекстного менеджера
with MyContextManager() as context:
    print("Внутри контекста")
 
Использование контекстного менеджера для обеспечения безопасности
import os

class ChangeDirectory:
    def __init__(self, new_dir):
        self.new_dir = new_dir
        self.old_dir = os.getcwd()

    def __enter__(self):
        os.chdir(self.new_dir)
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        os.chdir(self.old_dir)

# Использование контекстного менеджера для изменения текущей директории
with ChangeDirectory("new_directory"):
    # Внутри этого блока текущая директория изменится на "new_directory"
    print("Текущая директория:", os.getcwd())

# После завершения блока with текущая директория вернется к предыдущей
print("Текущая директория:", os.getcwd())
 
Использование контекстного менеджера для управления соединением с базой данных
import sqlite3

class DatabaseConnection:
    def __init__(self, db_name):
        self.db_name = db_name

    def __enter__(self):
        self.conn = sqlite3.connect(self.db_name)
        return self.conn

    def __exit__(self, exc_type, exc_value, traceback):
        self.conn.close()

# Использование контекстного менеджера для работы с базой данных
with DatabaseConnection("example.db") as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

категории

ТЕОРИЯ

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы

Мы в соцсетях