Zdjęcie: Johnstocker on Freepik
Jakiś czas temu napisałem tutorial nt pisanie wydajnego kodu w Pythonie. Mówiłem w nim o używaniu menedżerów kontekstu i instrukcji with do efektywnego zarządzania zasobami.
Użyłem prostego przykładu obsługi plików, aby pokazać, jak pliki są automatycznie zamykane, gdy wykonanie kończy się z blokiem with — nawet jeśli wystąpił wyjątek.
Choć obsługa plików jest dobrym pierwszym przykładem, szybko może się znudzić. Dlatego w tym samouczku chciałbym omówić inne interesujące zastosowania menedżerów kontekstu – wykraczające poza obsługę plików. Skoncentrujemy się na obsłudze połączeń z bazami danych, zarządzaniu podprocesami i precyzyjnej arytmetyce zmiennoprzecinkowej.
Menedżerowie kontekstu w Pythonie umożliwiają pisanie czystszego kodu podczas pracy z zasobami. Zapewniają zwięzłą składnię do konfigurowania i niszczenia zasobów poprzez:
- An wchodzić logika, która jest wywoływana, gdy wykonanie wchodzi w kontekst i
- An wyjście logika jest wywoływana, gdy wykonanie opuszcza kontekst
Najprostszym przykładem jest obsługa plików. Tutaj używamy open()
funkcja w with
instrukcja, aby uzyskać procedurę obsługi plików:
with open('filename.txt', 'w') as file:
file.write('Something random')
To nabywa zasób — obiekt pliku — który jest używany (zapisujemy do pliku) w bloku kodu. Plik zostaje zamknięty po wyjściu z kontekstu; więc nie ma wycieków zasobów.
Możesz napisać ogólną wersję tego w następujący sposób:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Przejdźmy teraz do konkretnych przykładów.
Kiedy tworzysz aplikacje w języku Python, dość powszechne jest łączenie się z bazami danych i wysyłanie zapytań do zawartych w nich tabel. Procedura wykonania tej operacji będzie wyglądać następująco:
- Zainstaluj łącznik bazy danych do pracy z bazą danych (taki jak psycopg2 dla Postgres i mysql-connector-python dla baz danych MySQL).
- Przeanalizuj plik konfiguracyjny, aby pobrać parametry połączenia.
- Użyj
connect()
funkcja umożliwiająca nawiązanie połączenia z bazą danych.
Łączenie z bazą danych | Zdjęcie autorstwa autora
Po połączeniu się z bazą danych możesz utworzyć bazę danych, aby wysyłać do niej zapytania. Uruchamiaj zapytania i pobieraj wyniki zapytań za pomocą metod kursora run i fetch.
Zapytanie o bazę danych | Zdjęcie autorstwa autora
W ten sposób tworzysz następujące zasoby: połączenie z bazą danych i kursor bazy danych. Zakodujmy teraz prosty, ogólny przykład, aby zobaczyć, jak możemy wykorzystać połączenie i obiekty kursora jako menedżerów kontekstu.
Parsowanie plików TOML w Pythonie
Rozważmy przykładowy plik TOML, powiedzmy db_config.toml, zawierający informacje wymagane do połączenia z bazą danych:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
Note: Do użycia potrzebny jest Python 3.11 lub nowsza wersja tomllib.
Python ma wbudowaną funkcję tomllib moduł (wprowadzony w Pythonie 3.11), który pozwala analizować pliki TOML. Możesz więc otworzyć plik db_config.toml i przeanalizować jego zawartość w następujący sposób:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Zauważ, że korzystamy z sekcji „baza danych” pliku db_config.toml. The load()
funkcja zwraca słownik Pythona. Możesz to sprawdzić, drukując zawartość credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Łączenie się z bazą danych
Załóżmy, że chcesz połączyć się z bazą danych Postgres. Możesz zainstalować Złącze psycopg2 używając pipa:
pip install psycopg2
Możesz używać zarówno połączenia, jak i obiektów kursora w instrukcjach, jak pokazano:
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)
W tym kodzie:
- Używamy
with
instrukcja tworząca kontekst do zarządzania połączeniem z bazą danych. - Wewnątrz tego kontekstu tworzymy kolejny kontekst do zarządzania kursorem bazy danych. Kursor zamyka się automatycznie po wyjściu z tego wewnętrznego kontekstu.
- Ponieważ połączenie jest również zamykane po wyjściu z kontekstu zewnętrznego, konstrukcja ta zapewnia prawidłowe zarządzanie zarówno połączeniem, jak i kursorem, co zmniejsza ryzyko wycieków zasobów.
Podobnej konstrukcji możesz użyć także podczas pracy z bazami danych SQLite i MySQL.
Moduł podprocesu Pythona zapewnia funkcjonalność uruchamiania poleceń zewnętrznych w skrypcie Pythona. The subprocess.Popen()
konstruktor tworzy nowy podproces. Którego możesz użyć w with
stwierdzenie takie:
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)
Tutaj uruchamiamy polecenie Bash ls -l
polecenie, aby wyświetlić długą listę plików w bieżącym katalogu:
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
Zasoby powiązane z podprocesem są zwalniane, gdy wykonanie wyjdzie z kontekstu with
komunikat.
Wbudowany typ danych float w Pythonie nie nadaje się do precyzyjnej arytmetyki zmiennoprzecinkowej. Jednak praca z danymi finansowymi, odczytami czujników i tym podobnymi wymaga dużej precyzji. Do takich zastosowań można użyć dziesiętny zamiast tego moduł.
Połączenia localcontext()
funkcjonować zwraca menedżera kontekstu. Możesz więc skorzystać z localcontext()
funkcja w with
instrukcję i ustaw precyzję dla bieżącego kontekstu, używając jak pokazano:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Oto wynik:
Output >>>
0.6666666666666666666666666666666666666667
Tutaj dokładność jest ustawiona na 40 miejsc po przecinku, ale tylko w tym zakresie with
blok. Kiedy wykonanie opuszcza bieżący kontekst, precyzja jest przywracana do domyślnej precyzji (28 miejsc po przecinku).
W tym samouczku dowiedzieliśmy się, jak można używać menedżerów kontekstów do obsługi połączeń z bazami danych, zarządzania podprocesami i kontekstami w precyzyjnej arytmetyce zmiennoprzecinkowej.
W następnym samouczku zobaczymy, jak możemy tworzyć niestandardowe menedżery kontekstów w Pythonie. Do tego czasu, szczęśliwego kodowania!
Bala Priya C jest deweloperem i pisarzem technicznym z Indii. Lubi pracować na styku matematyki, programowania, data science i tworzenia treści. Jej obszary zainteresowań i wiedzy obejmują DevOps, data science i przetwarzanie języka naturalnego. Lubi czytać, pisać, kodować i kawę! Obecnie pracuje nad zdobywaniem wiedzy i dzieleniem się nią ze społecznością programistów, tworząc samouczki, poradniki, opinie i nie tylko.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoData.Network Pionowe generatywne AI. Wzmocnij się. Dostęp tutaj.
- PlatoAiStream. Inteligencja Web3. Wiedza wzmocniona. Dostęp tutaj.
- PlatonESG. Węgiel Czysta technologia, Energia, Środowisko, Słoneczny, Gospodarowanie odpadami. Dostęp tutaj.
- Platon Zdrowie. Inteligencja w zakresie biotechnologii i badań klinicznych. Dostęp tutaj.
- Źródło: 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
- :ma
- :Jest
- :nie
- $W GÓRĘ
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- O nas
- Przejmuje
- temu
- dopuszczać
- również
- an
- i
- Inne
- aplikacje
- SĄ
- obszary
- AS
- powiązany
- At
- autoring
- automatycznie
- automatycznie
- b
- bash
- BE
- Blokować
- Nudny
- obie
- Budowanie
- wbudowany
- ale
- by
- nazywa
- CAN
- zdobyć
- szansa
- odkurzacz
- zamknięte
- kod
- Kodowanie
- wspólny
- społeczność
- zwięzły
- Skontaktuj się
- połączony
- połączenie
- połączenia
- skonstruować
- zawierać
- zawartość
- Tworzenie treści
- treść
- kontekst
- konteksty
- Stwórz
- tworzy
- tworzenie
- Listy uwierzytelniające
- Aktualny
- Obecnie
- zwyczaj
- dane
- nauka danych
- Baza danych
- Bazy danych
- Domyślnie
- Deweloper
- DevOps
- do
- robi
- na dół
- wydajny
- skutecznie
- zapewnia
- Wchodzi
- zapewniają
- przykład
- przykłady
- wyjątek
- egzekucja
- Wyjście
- wychodzi
- ekspertyza
- zewnętrzny
- filet
- Akta
- budżetowy
- dane finansowe
- i terminów, a
- pływak
- unoszący się
- Skupiać
- następujący
- W razie zamówieenia projektu
- od
- funkcjonować
- Funkcjonalność
- otrzymać
- Go
- dobry
- Przewodniki
- Prowadzenie
- Zaoszczędzić
- jej
- tutaj
- Wysoki
- gospodarz
- W jaki sposób
- HTML
- HTTPS
- i
- if
- obraz
- importować
- in
- zawierać
- Indie
- Informacje
- wewnętrzny
- wewnątrz
- zainstalować
- zamiast
- odsetki
- ciekawy
- skrzyżowanie
- najnowszych
- wprowadzono
- IT
- JEGO
- Styczeń
- jpg
- Knuggety
- wiedza
- język
- później
- Wycieki
- dowiedziałem
- nauka
- pozwala
- lubić
- lubi
- Lista
- logika
- długo
- Popatrz
- wygląda jak
- Główny
- zarządzanie
- zarządzane
- Zarządzający
- zarządzający
- matematyka
- metody
- moduł
- jeszcze
- MySQL
- Naturalny
- Język naturalny
- Przetwarzanie języka naturalnego
- Potrzebować
- Nowości
- Następny
- Nie
- już dziś
- obiekty
- of
- on
- pewnego razu
- tylko
- koncepcja
- Opinia
- or
- Inne
- na zewnątrz
- wydajność
- koniec
- parametry
- Hasło
- sztuk
- rura
- Miejsca
- plato
- Analiza danych Platona
- PlatoDane
- punkt
- Detaliczność
- druk
- kontynuować
- wygląda tak
- przetwarzanie
- Programowanie
- prawidłowo
- zapewniać
- zapewnia
- Python
- zapytania
- szybko
- całkiem
- przypadkowy
- RE
- Czytający
- wymagany
- Zasób
- Zasoby
- przywrócone
- dalsze
- Efekt
- powraca
- run
- s
- powiedzieć
- nauka
- scenariusz
- Sekcja
- widzieć
- wybierać
- czujnik
- zestaw
- dzielenie
- ona
- pokazać
- pokazane
- podobny
- Prosty
- So
- coś
- specyficzny
- Zestawienie sprzedaży
- oświadczenia
- taki
- odpowiedni
- składnia
- Stuknij
- Techniczny
- że
- Połączenia
- następnie
- Tam.
- one
- to
- Przez
- do
- także
- Kwota produktów:
- Tutorial
- tutoriale
- rodzaj
- aż do
- posługiwać się
- używany
- użyteczny
- Użytkownik
- zastosowania
- za pomocą
- zweryfikować
- wersja
- W
- chcieć
- we
- jeśli chodzi o komunikację i motywację
- który
- Podczas
- dlaczego
- będzie
- w
- w ciągu
- Praca
- workflow
- pracujący
- napisać
- pisarz
- pisanie
- napisał
- ty
- zefirnet