Bild av johnstocker on Freepik
För ett tag sedan skrev jag en tutorial om skriva effektiv Python-kod. I den pratade jag om att använda context managers och with statement för att hantera resurser effektivt.
Jag använde ett enkelt filhanteringsexempel för att visa hur filer stängs automatiskt när exekveringen avslutar with-blocket – även om det finns ett undantag.
Även om filhantering är ett bra första exempel kan det snabbt bli tråkigt. Det är därför jag skulle vilja gå igenom andra intressanta användningar av kontexthanterare – utöver filhantering – i den här handledningen. Vi kommer att fokusera på att hantera databasanslutningar, hantera delprocesser och aritmetik med hög precision med flyttal.
Kontexthanterare i Python låter dig skriva renare kod när du arbetar med resurser. De ger en kortfattad syntax för att ställa in och riva resurser genom:
- An Till New Earth logik som anropas när exekveringen kommer in i sammanhanget och
- An avsluta logic the anropas när exekveringen lämnar sammanhanget
Det enklaste exemplet på detta är filhantering. Här använder vi open()
funktion i with
uttalande för att få en filhanterare:
with open('filename.txt', 'w') as file:
file.write('Something random')
Detta förvärvar resursen – filobjektet – som används (vi skriver till filen) inom kodblocket. Filen stängs när körningen lämnar sammanhanget; så det finns inga resursläckor.
Du kan skriva den allmänna versionen av detta så här:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Låt oss nu gå vidare till de specifika exemplen.
När du bygger Python-applikationer är det ganska vanligt att ansluta till databaser och fråga tabellerna de innehåller. Och arbetsflödet för att göra detta kommer att se ut så här:
- Installera databasanslutaren för att fungera med databasen (som psycopg2 för Postgres och mysql-connector-python för MySQL-databaser).
- Analysera konfigurationsfilen för att hämta anslutningsparametrarna.
- Använd
connect()
funktion för att upprätta anslutning till databasen.
Ansluter till db | Bild av författare
När du har anslutit till databasen kan du skapa en databas för att fråga databasen. Kör frågor och hämta resultaten av frågan med metoderna kör och hämta markören.
Frågar i db | Bild av författare
När du gör det skapar du följande resurser: en databasanslutning och en databasmarkör. Låt oss nu koda ett enkelt generiskt exempel för att se hur vi kan använda anslutningen och markörobjekten som kontexthanterare.
Parsar TOML-filer i Python
Överväg ett exempel på en TOML-fil, säg db_config.toml, som innehåller den information som krävs för att ansluta till databasen:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
Anmärkningar: Du behöver Python 3.11 eller en senare version för att använda tomllib.
Python har en inbyggd tomllib modul (introducerad i Python 3.11) som låter dig analysera TOML-filer. Så du kan öppna filen db_config.toml och analysera dess innehåll så här:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Lägg märke till att vi klickar på "databasen" i filen db_config.toml. De load()
funktion returnerar en Python-ordbok. Du kan verifiera detta genom att skriva ut innehållet i credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Ansluter till databasen
Säg att du vill ansluta till en Postgres-databas. Du kan installera psychopg2-kontakt använder pip:
pip install psycopg2
Du kan använda både anslutnings- och markörobjekten med satser som visas:
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)
I den här koden:
- Vi använder
with
för att skapa ett sammanhang för att hantera databasanslutningen. - Inuti detta sammanhang skapar vi ett annat sammanhang för att hantera databasmarkören. Markören stängs automatiskt när du lämnar detta inre sammanhang.
- Eftersom anslutningen också stängs när man lämnar det yttre sammanhanget, säkerställer denna konstruktion att både anslutningen och markören hanteras korrekt – vilket minskar risken för resursläckor.
Du kan också använda en liknande konstruktion när du arbetar med SQLite- och MySQL-databaser.
Pythons delprocessmodul ger funktionalitet för att köra externa kommandon i ett Python-skript. De subprocess.Popen()
konstruktorn skapar en ny delprocess. Som du kan använda i en with
uttalande så här:
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)
Här kör vi kommandot Bash ls -l
kommando för att lång lista filerna i den aktuella katalogen:
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
Resurserna som är associerade med underprocessen frigörs när exekveringen lämnar kontexten för with
uttalande.
Den inbyggda flytdatatypen i Python är inte lämplig för aritmetik med hög precision med flyttal. Men du behöver hög precision när du arbetar med finansiell data, sensoravläsningar och liknande. För sådana applikationer kan du använda decimal- modul istället.
Smakämnen localcontext()
fungera returnerar en kontexthanterare. Så du kan använda localcontext()
funktion i with
uttalande och ställ in precisionen för det aktuella sammanhanget med hjälp av som visas:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Här är utgången:
Output >>>
0.6666666666666666666666666666666666666667
Här är precisionen inställd på 40 decimaler — men bara inom detta with
blockera. När exekveringen lämnar det aktuella sammanhanget, återställs precisionen till standardprecisionen (med 28 decimaler).
I den här handledningen lärde vi oss hur kontexthanterare kan användas för att hantera databasanslutningar, hantera delprocesser och sammanhang i högprecisions flyttalsaritmetik.
I nästa handledning kommer vi att se hur vi kan skapa anpassade sammanhangshanterare i Python. Tills dess, glad kodning!
Bala Priya C är en utvecklare och teknisk skribent från Indien. Hon gillar att arbeta i skärningspunkten mellan matematik, programmering, datavetenskap och innehållsskapande. Hennes intresseområden och expertis inkluderar DevOps, datavetenskap och naturlig språkbehandling. Hon tycker om att läsa, skriva, koda och fika! För närvarande arbetar hon med att lära sig och dela sin kunskap med utvecklargemenskapen genom att skriva självstudier, guider, åsiktsartiklar och mer.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- PlatoHealth. Biotech och kliniska prövningar Intelligence. Tillgång här.
- Källa: 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
- : har
- :är
- :inte
- $UPP
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- Om Oss
- förvärvar
- sedan
- tillåter
- också
- an
- och
- Annan
- tillämpningar
- ÄR
- områden
- AS
- associerad
- At
- författarskap
- Automat
- automatiskt
- b
- bash
- BE
- Blockera
- Boring
- båda
- Byggnad
- inbyggd
- men
- by
- kallas
- KAN
- fånga
- chans
- renare
- stängt
- koda
- Kodning
- Gemensam
- samfundet
- koncis
- Kontakta
- anslutna
- anslutning
- Anslutningar
- konstruera
- innehålla
- innehåll
- innehållsskapande
- innehåll
- sammanhang
- kontexter
- skapa
- skapar
- skapande
- referenser
- Aktuella
- För närvarande
- beställnings
- datum
- datavetenskap
- Databas
- databaser
- Standard
- Utvecklare
- DevOps
- do
- gör
- ner
- effektiv
- effektivt
- säkerställer
- Går in
- etablera
- exempel
- exempel
- undantag
- utförande
- avsluta
- exits
- expertis
- extern
- Fil
- Filer
- finansiella
- finansiella data
- Förnamn
- Flyta
- flytande
- Fokus
- efter
- För
- från
- fungera
- funktionalitet
- skaffa sig
- Go
- god
- Guider
- Arbetsmiljö
- lyckligt
- här
- här.
- Hög
- värd
- Hur ser din drömresa ut
- html
- HTTPS
- i
- if
- bild
- importera
- in
- innefattar
- indien
- info
- inre
- inuti
- installera
- istället
- intresse
- intressant
- skärning
- in
- introducerade
- IT
- DESS
- jan
- jpg
- KDnuggets
- kunskap
- språk
- senare
- Läckor
- lärt
- inlärning
- Lets
- tycka om
- gillar
- Lista
- Logiken
- Lång
- se
- ser ut som
- Huvudsida
- hantera
- förvaltade
- chefer
- hantera
- matte
- metoder
- modul
- mer
- MySQL
- Natural
- Naturligt språk
- Naturlig språkbehandling
- Behöver
- Nya
- Nästa
- Nej
- nu
- objekt
- of
- on
- gång
- endast
- öppet
- Yttrande
- or
- Övriga
- ut
- produktion
- över
- parametrar
- Lösenord
- bitar
- Röret
- platser
- plato
- Platon Data Intelligence
- PlatonData
- Punkt
- Precision
- tryckning
- Fortsätt
- process
- bearbetning
- Programmering
- ordentligt
- ge
- ger
- Python
- sökfrågor
- snabbt
- ganska
- slumpmässig
- RE
- Läsning
- Obligatorisk
- resurs
- Resurser
- återställd
- resultera
- Resultat
- återgår
- Körning
- s
- säga
- Vetenskap
- skript
- §
- se
- välj
- givare
- in
- delning
- hon
- show
- visas
- liknande
- Enkelt
- So
- något
- specifik
- .
- uttalanden
- sådana
- lämplig
- syntax
- Tryck
- Teknisk
- den där
- Smakämnen
- sedan
- Där.
- de
- detta
- Genom
- till
- alltför
- Totalt
- handledning
- självstudiekurser
- Typ
- tills
- användning
- Begagnade
- användbara
- Användare
- användningar
- med hjälp av
- verifiera
- version
- W
- vill
- we
- när
- som
- medan
- varför
- kommer
- med
- inom
- Arbete
- arbetsflöde
- arbetssätt
- skriva
- författare
- skrivning
- skrev
- dig
- zephyrnet