Изображение от johnstocker на Freepik
Некоторое время назад я написал учебник по написание эффективного кода Python. В нем я говорил об использовании контекстных менеджеров и оператора with для эффективного управления ресурсами.
Я использовал простой пример обработки файлов, чтобы показать, как файлы автоматически закрываются при выходе из блока with, даже если есть исключение.
Хотя обработка файлов — хороший первый пример, она может быстро надоесть. Вот почему в этом уроке я хотел бы рассмотреть другие интересные варианты использования контекстных менеджеров, помимо обработки файлов. Мы сосредоточимся на обработке подключений к базе данных, управлении подпроцессами и высокоточной арифметике с плавающей запятой.
Контекстные менеджеры в Python позволяют писать более чистый код при работе с ресурсами. Они предоставляют краткий синтаксис для настройки и отключения ресурсов посредством:
- An вводить логика, которая вызывается, когда выполнение входит в контекст и
- An выход логика вызывается, когда выполнение выходит из контекста
Самый простой пример — обработка файлов. Здесь мы используем open()
функции в with
оператор для получения обработчика файла:
with open('filename.txt', 'w') as file:
file.write('Something random')
При этом получается ресурс — файловый объект, который используется (мы записываем в файл) внутри блока кода. Файл закрывается, как только выполнение выходит из контекста; поэтому утечек ресурсов нет.
Вы можете написать общую версию этого так:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Теперь перейдем к конкретным примерам.
Когда вы создаете приложения Python, довольно часто приходится подключаться к базам данных и запрашивать содержащиеся в них таблицы. И рабочий процесс для этого будет выглядеть так:
- Установите соединитель базы данных для работы с базой данных (например, psycopg2 для Postgres и mysql-connector-python для баз данных MySQL).
- Проанализируйте файл конфигурации, чтобы получить параметры подключения.
- Использовать
connect()
функция установления соединения с базой данных.
Подключение к БД | Изображение автора
После подключения к базе данных вы можете создать базу данных для запроса базы данных. Запускайте запросы и получайте результаты запроса, используя методы курсора run и fetch.
Запрос к базе данных | Изображение автора
При этом вы создаете следующие ресурсы: соединение с базой данных и курсор базы данных. Теперь давайте напишем простой общий пример, чтобы увидеть, как мы можем использовать соединение и объекты курсора в качестве менеджеров контекста.
Анализ файлов TOML в Python
Рассмотрим пример файла TOML, скажем, db_config.toml, содержащего необходимую информацию для подключения к базе данных:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
Внимание: для использования вам потребуется Python 3.11 или более поздняя версия. томлиб.
Python имеет встроенный томлиб модуль (представленный в Python 3.11), который позволяет анализировать файлы TOML. Итак, вы можете открыть файл db_config.toml и проанализировать его содержимое следующим образом:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Обратите внимание, что мы заходим в раздел «база данных» файла db_config.toml. load()
функция возвращает словарь Python. Вы можете убедиться в этом, распечатав содержимое credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Подключение к базе данных
Допустим, вы хотите подключиться к базе данных Postgres. Вы можете установить разъем psycopg2 используя пип:
pip install psycopg2
Вы можете использовать как соединение, так и объекты курсора с операторами, как показано:
import psycopg2
# Connect to the database
with psycopg2.connect(**credentials) as conn:
# Inside this context, the connection is open and managed
with conn.cursor() as cur:
# Inside this context, the cursor is open and managed
cur.execute('SELECT * FROM my_table')
result = cur.fetchall()
print(result)
В этом коде:
- Мы используем
with
оператор для создания контекста для управления подключением к базе данных. - Внутри этого контекста мы создаем еще один контекст для управления курсором базы данных. Курсор автоматически закрывается при выходе из этого внутреннего контекста.
- Поскольку соединение также закрывается при выходе из внешнего контекста, эта конструкция гарантирует правильное управление соединением и курсором, что снижает вероятность утечки ресурсов.
Вы также можете использовать аналогичную конструкцию при работе с базами данных SQLite и MySQL.
Модуль подпроцесса Python предоставляет функциональные возможности для запуска внешних команд внутри сценария Python. subprocess.Popen()
конструктор создает новый подпроцесс. Который вы можете использовать в with
заявление вроде так:
import subprocess
# Run an external command and capture its output
with subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True) as process:
output, _ = process.communicate()
print(output)
Здесь мы запускаем команду Bash ls -l
команда для длинного списка файлов в текущем каталоге:
Output >>>
total 4
-rw-rw-r-- 1 balapriya balapriya 0 Jan 5 18:31 db_info.toml
-rw-rw-r-- 1 balapriya balapriya 267 Jan 5 18:32 main.py
Ресурсы, связанные с подпроцессом, освобождаются, как только выполнение выходит из контекста подпроцесса. with
заявление.
Встроенный тип данных float в Python не подходит для высокоточной арифметики с плавающей запятой. Но вам нужна высокая точность при работе с финансовыми данными, показаниями датчиков и тому подобным. Для таких приложений вы можете использовать десятичная дробь модуль вместо этого.
Ассоциация localcontext()
функция возвращает диспетчер контекста. Таким образом, вы можете использовать localcontext()
функции в with
и установите точность для текущего контекста, как показано:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Вот вывод:
Output >>>
0.6666666666666666666666666666666666666667
Здесь точность установлена на уровне 40 десятичных знаков, но только в пределах этого значения. with
блокировать. Когда выполнение выходит из текущего контекста, точность восстанавливается до точности по умолчанию (28 десятичных знаков).
В этом уроке мы узнали, как можно использовать менеджеры контекста для обработки подключений к базе данных, управления подпроцессами и контекстами с помощью высокоточной арифметики с плавающей запятой.
В следующем уроке мы увидим, как создавать собственные менеджеры контекста в Python. А пока удачного кодирования!
Бала Прия С — разработчик и технический писатель из Индии. Ей нравится работать на стыке математики, программирования, науки о данных и создания контента. Сферы ее интересов и опыта включают DevOps, науку о данных и обработку естественного языка. Она любит читать, писать, программировать и пить кофе! В настоящее время она учится и делится своими знаниями с сообществом разработчиков, создавая учебные пособия, практические руководства, авторские статьи и многое другое.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- PlatoData.Network Вертикальный генеративный ИИ. Расширьте возможности себя. Доступ здесь.
- ПлатонАйСтрим. Интеллект Web3. Расширение знаний. Доступ здесь.
- ПлатонЭСГ. Углерод, чистые технологии, Энергия, Окружающая среда, Солнечная, Управление отходами. Доступ здесь.
- ПлатонЗдоровье. Биотехнологии и клинические исследования. Доступ здесь.
- Источник: https://www.kdnuggets.com/3-interesting-uses-of-python-context-managers?utm_source=rss&utm_medium=rss&utm_campaign=3-interesting-uses-of-pythons-context-managers
- :имеет
- :является
- :нет
- $UP
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- О нас
- Приобретает
- тому назад
- позволять
- причислены
- an
- и
- Другой
- Приложения
- МЫ
- области
- AS
- связанный
- At
- авторинга
- Автоматический
- автоматически
- b
- колотить
- BE
- Заблокировать
- Сверление
- изоферменты печени
- Строительство
- встроенный
- но
- by
- под названием
- CAN
- захватить
- шанс
- очиститель
- закрыто
- код
- Кодирование
- Общий
- сообщество
- краткий
- Свяжитесь
- подключенный
- связи
- Коммутация
- строить
- содержать
- содержание
- контентного создание
- содержание
- контекст
- контексты
- Создайте
- создает
- создание
- Полномочия
- Текущий
- В настоящее время
- изготовленный на заказ
- данным
- наука о данных
- База данных
- базы данных
- По умолчанию
- Застройщик
- DevOps
- do
- дело
- вниз
- эффективный
- эффективно
- обеспечивает
- Вводит
- установить
- пример
- Примеры
- исключение
- выполнение
- Выход
- выходы
- опыта
- и, что лучший способ
- Файл
- Файлы
- финансовый
- финансовые данные
- Во-первых,
- Поплавок
- плавающий
- Фокус
- после
- Что касается
- от
- функция
- функциональность
- получить
- Go
- хорошо
- Гиды
- Управляемость
- счастливый
- ее
- здесь
- High
- кашель
- Как
- HTML
- HTTPS
- i
- if
- изображение
- Импортировать
- in
- включают
- Индия
- info
- внутренний
- внутри
- устанавливать
- вместо
- интерес
- интересный
- пересечение
- в
- выпустили
- IT
- ЕГО
- Января
- JPG
- КДнаггетс
- знания
- язык
- новее
- Утечки
- узнали
- изучение
- Lets
- такое как
- нравится
- Список
- логика
- Длинное
- посмотреть
- выглядит как
- Главная
- управлять
- управляемого
- Менеджеры
- управления
- математике
- методы
- модуль
- БОЛЕЕ
- MySQL
- натуральный
- Естественный язык
- Обработка естественного языка
- Необходимость
- Новые
- следующий
- нет
- сейчас
- объекты
- of
- on
- консолидировать
- только
- открытый
- Обзор
- or
- Другое
- внешний
- выходной
- за
- параметры
- Пароль
- штук
- труба
- Мест
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- Точка
- Точность
- печать
- продолжить
- процесс
- обработка
- Программирование
- должным образом
- обеспечивать
- приводит
- Питон
- Запросы
- быстро
- вполне
- случайный
- RE
- Reading
- обязательный
- ресурс
- Полезные ресурсы
- восстановлено
- результат
- Итоги
- Возвращает
- Run
- s
- сообщили
- Наука
- скрипт
- Раздел
- посмотреть
- выберите
- датчик
- набор
- разделение
- она
- показывать
- показанный
- аналогичный
- просто
- So
- удалось
- конкретный
- заявление
- отчетность
- такие
- подходящее
- синтаксис
- Нажмите
- Технический
- который
- Ассоциация
- тогда
- Там.
- они
- этой
- Через
- в
- слишком
- Всего
- учебник
- учебные пособия
- напишите
- до
- использование
- используемый
- полезный
- Информация о пользователе
- использования
- через
- проверить
- версия
- W
- хотеть
- we
- когда
- , которые
- в то время как
- зачем
- будете
- в
- Работа
- рабочий
- работает
- записывать
- писатель
- письмо
- писал
- являетесь
- зефирнет