Зображення 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 або новіша tomllib.
Python має вбудований tomllib модуль (введений у 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. The load()
функція повертає словник Python. Ви можете переконатися в цьому, роздрукувавши вміст credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Підключення до бази даних
Скажімо, ви хочете підключитися до бази даних Postgres. Ви можете встановити роз'єм psycopg2 за допомогою pip:
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. The subprocess.Popen()
конструктор створює новий підпроцес. Який ви можете використовувати в a 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, науку про дані та обробку природної мови. Вона любить читати, писати, кодувати та кави! Зараз вона навчається та ділиться своїми знаннями зі спільнотою розробників, створюючи навчальні посібники, інструкції, думки тощо.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- PlatoHealth. Розвідка про біотехнології та клінічні випробування. Доступ тут.
- джерело: 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
- захоплення
- шанс
- очищувач
- закрито
- код
- Кодування
- загальний
- співтовариство
- лаконічний
- З'єднуватися
- підключений
- зв'язку
- Зв'язки
- будувати
- містити
- зміст
- контент-створення
- зміст
- контекст
- контексти
- створювати
- створює
- створення
- Повноваження
- Поточний
- В даний час
- виготовлений на замовлення
- дані
- наука про дані
- Database
- базами даних
- дефолт
- Розробник
- DevOps
- do
- справи
- вниз
- ефективний
- продуктивно
- гарантує
- Входить
- встановити
- приклад
- Приклади
- виняток
- виконання
- Вихід
- виходи
- експертиза
- зовнішній
- філе
- Файли
- фінансовий
- фінансові дані
- Перший
- Поплавок
- плаваючий
- Сфокусувати
- після
- для
- від
- функція
- функціональність
- отримати
- Go
- добре
- Гід
- Обробка
- щасливий
- її
- тут
- Високий
- господар
- Як
- HTML
- HTTPS
- i
- if
- зображення
- імпорт
- in
- включати
- Індію
- інформація
- внутрішній
- всередині
- встановлювати
- замість
- інтерес
- цікавий
- перетин
- в
- введені
- IT
- ЙОГО
- січень
- JPG
- KDnuggets
- знання
- мова
- пізніше
- Витоку
- вчений
- вивчення
- дозволяє
- як
- Сподобалося
- список
- логіка
- Довго
- подивитися
- виглядає як
- головний
- управляти
- вдалося
- Менеджери
- управління
- математики
- методика
- Модулі
- більше
- MySQL
- Природний
- Природна мова
- Обробка природних мов
- Необхідність
- Нові
- наступний
- немає
- зараз
- об'єкти
- of
- on
- один раз
- тільки
- відкрити
- Думка
- or
- Інше
- з
- вихід
- над
- параметри
- Пароль
- частин
- труба
- місця
- plato
- Інформація про дані Платона
- PlatoData
- точка
- Точність
- друк
- продовжити
- процес
- обробка
- Програмування
- правильно
- забезпечувати
- забезпечує
- Python
- запити
- швидко
- досить
- випадковий
- RE
- читання
- вимагається
- ресурс
- ресурси
- відновлено
- результат
- результати
- Умови повернення
- прогін
- s
- say
- наука
- сценарій
- розділ
- побачити
- вибрати
- датчик
- комплект
- поділ
- вона
- Показувати
- показаний
- аналогічний
- простий
- So
- що в сім'ї щось
- конкретний
- Заява
- заяви
- такі
- підходящий
- синтаксис
- Кран
- технічний
- Що
- Команда
- потім
- Там.
- вони
- це
- через
- до
- занадто
- Усього:
- підручник
- навчальні посібники
- тип
- до
- використання
- використовуваний
- корисний
- користувач
- використовує
- використання
- перевірити
- версія
- W
- хотіти
- we
- коли
- який
- в той час як
- чому
- волі
- з
- в
- Work
- робочий
- робочий
- запис
- письменник
- лист
- пише
- ви
- зефірнет