Pildi autor johnstocker on Freepik
Mõni aeg tagasi kirjutasin õpetuse tõhusa Pythoni koodi kirjutamine. Selles rääkisin kontekstihaldurite ja koos-lause kasutamisest ressursside tõhusaks haldamiseks.
Kasutasin lihtsat failikäsitlemise näidet, et näidata, kuidas failid suletakse automaatselt, kui täitmine blokist with väljub – isegi kui on erand.
Kuigi failihaldus on hea esimene näide, võib see kiiresti igavaks muutuda. Seetõttu tahaksin selles õpetuses käsitleda muid huvitavaid kontekstihaldurite kasutusviise – peale failikäsitluse. Keskendume andmebaasiühenduste käsitlemisele, alamprotsesside haldamisele ja ülitäpsele ujukomaaritmeetikale.
Pythoni kontekstihaldurid võimaldavad teil ressurssidega töötamisel kirjutada puhtamat koodi. Need pakuvad kokkuvõtlikku süntaksit ressursside seadistamiseks ja eemaldamiseks järgmiselt.
- An sisestama loogika, mis kutsutakse välja, kui täitmine siseneb konteksti ja
- An väljumiseks loogika kutsutakse välja, kui täitmine väljub kontekstist
Lihtsaim näide selle kohta on failihaldus. Siin kasutame open()
toimib with
avaldus failitöötleja hankimiseks:
with open('filename.txt', 'w') as file:
file.write('Something random')
See omandab ressursi - failiobjekti -, mida kasutatakse (me kirjutame faili) koodiplokis. Fail suletakse, kui täitmine kontekstist väljub; nii et ressursside lekkeid pole.
Selle üldise versiooni saate kirjutada järgmiselt:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Liigume nüüd konkreetsete näidete juurde.
Pythoni rakenduste loomisel on üsna tavaline andmebaasidega ühenduse loomine ja neis sisalduvate tabelite päringute tegemine. Ja töövoog selle tegemiseks näeb välja järgmine:
- Andmebaasiga töötamiseks installige andmebaasi konnektor (nt psycopg2 Postgresi jaoks ja mysql-connector-python MySQL-i andmebaaside jaoks).
- Ühenduse parameetrite toomiseks sõeluge konfiguratsioonifail.
- Kasuta
connect()
funktsioon andmebaasiga ühenduse loomiseks.
Ühendamine db | Pilt autorilt
Kui olete andmebaasiga ühenduse loonud, saate andmebaasi päringute tegemiseks luua andmebaasi. Käivitage päringuid ja tooge päringu tulemused, kasutades kursori käivitamise ja toomise meetodeid.
Päringu tegemine db | Pilt autorilt
Seda tehes loote järgmised ressursid: andmebaasiühendus ja andmebaasikursor. Nüüd kodeerime lihtsa üldise näite, et näha, kuidas saame ühendust ja kursoriobjekte kontekstihaldurina kasutada.
TOML-failide sõelumine Pythonis
Kaaluge TOML-i näidisfaili, näiteks db_config.toml, mis sisaldab andmebaasiga ühenduse loomiseks vajalikku teavet:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
märkused: kasutamiseks vajate Pythoni versiooni 3.11 või uuemat versiooni tomllib.
Pythonil on sisseehitatud tomllib moodul (kasutusele võetud Python 3.11-s), mis võimaldab sõeluda TOML-faile. Nii saate avada faili db_config.toml ja sõeluda selle sisu järgmiselt:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Pange tähele, et me puudutame faili db_config.toml jaotist "andmebaas". The load()
funktsioon tagastab Pythoni sõnastiku. Saate seda kontrollida, printides välja selle sisu credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Andmebaasi ühendamine
Oletame, et soovite luua ühenduse Postgresi andmebaasiga. Saate installida psycopg2 pistik pipi kasutades:
pip install psycopg2
Saate kasutada nii ühenduse kui ka kursori objekte koos lausetega, nagu näidatud:
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)
Selles koodis:
- Me kasutame
with
avaldus andmebaasiühenduse haldamiseks konteksti loomiseks. - Selles kontekstis loome andmebaasikursori haldamiseks teise konteksti. Sellest sisemisest kontekstist väljumisel suletakse kursor automaatselt.
- Kuna ühendus suletakse ka välisest kontekstist väljumisel, tagab see konstruktsioon, et nii ühendust kui ka kursorit hallatakse õigesti, vähendades ressursside lekete võimalust.
Sarnast konstruktsiooni saate kasutada ka SQLite ja MySQL andmebaasidega töötades.
Pythoni alamprotsessimoodul pakub funktsiooni väliste käskude käitamiseks Pythoni skriptis. The subprocess.Popen()
konstruktor loob uue alamprotsessi. Mida saate kasutada a with
selline väide:
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)
Siin käivitame käsu Bash ls -l
käsk praeguses kataloogis olevate failide pikaks loetlemiseks:
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
Alamprotsessiga seotud ressursid vabastatakse, kui täitmine väljub kontekstist with
avalduses.
Pythoni sisseehitatud ujukoma andmetüüp ei sobi ülitäpse ujukomaaritmeetika jaoks. Kuid finantsandmete, andurite näitude ja muu sarnasega töötamisel on vaja suurt täpsust. Selliste rakenduste jaoks saate kasutada Kümnendkoht mooduli asemel.
. localcontext()
funktsioon tagastab kontekstihalduri. Nii et saate kasutada localcontext()
toimib with
lause ja määrake praeguse konteksti täpsus, kasutades näidatud viisil:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Siin on väljund:
Output >>>
0.6666666666666666666666666666666666666667
Siin on täpsuseks seatud 40 kohta pärast koma, kuid ainult selle piires with
blokk. Kui täitmine väljub praegusest kontekstist, taastatakse täpsus vaiketäpsusele (28 kohta pärast koma).
Selles õpetuses õppisime, kuidas kontekstihaldureid saab kasutada andmebaasiühenduste haldamiseks, alamprotsesside ja kontekstide haldamiseks ülitäpses ujukomaaritmeetikas.
Järgmises õpetuses näeme, kuidas saame Pythonis kohandatud kontekstihaldureid luua. Seniks head kodeerimist!
Bala Priya C on Indiast pärit arendaja ja tehniline kirjanik. Talle meeldib töötada matemaatika, programmeerimise, andmeteaduse ja sisu loomise ristumiskohas. Tema huvialade ja teadmiste hulka kuuluvad DevOps, andmeteadus ja loomuliku keele töötlemine. Ta naudib lugemist, kirjutamist, kodeerimist ja kohvi! Praegu tegeleb ta õppimisega ja jagab oma teadmisi arendajakogukonnaga, koostades õpetusi, juhendeid, arvamuslugusid ja muud.
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- PlatoData.Network Vertikaalne generatiivne Ai. Jõustage ennast. Juurdepääs siia.
- PlatoAiStream. Web3 luure. Täiustatud teadmised. Juurdepääs siia.
- PlatoESG. Süsinik, CleanTech, Energia, Keskkond päikeseenergia, Jäätmekäitluse. Juurdepääs siia.
- PlatoTervis. Biotehnoloogia ja kliiniliste uuringute luureandmed. Juurdepääs siia.
- Allikas: 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
- :on
- :on
- :mitte
- $ UP
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- MEIST
- Omandab
- tagasi
- võimaldama
- Ka
- an
- ja
- Teine
- rakendused
- OLEME
- valdkondades
- AS
- seotud
- At
- autor
- Automaatne
- automaatselt
- b
- sisse lööma
- BE
- Blokeerima
- Bore
- mõlemad
- Ehitus
- sisseehitatud
- kuid
- by
- kutsutud
- CAN
- lüüa
- võimalus
- puhasti
- suletud
- kood
- Kodeerimine
- ühine
- kogukond
- lühike
- Võta meiega ühendust
- seotud
- ühendus
- Side
- ehitama
- sisaldama
- sisu
- sisu loomine
- sisu
- kontekst
- kontekstid
- looma
- loob
- loomine
- volikiri
- Praegune
- Praegu
- tava
- andmed
- andmeteadus
- andmebaas
- andmebaasid
- vaikimisi
- arendaja
- DevOps
- do
- teeme
- alla
- tõhus
- tõhusalt
- tagab
- Siseneb
- looma
- näide
- näited
- erand
- täitmine
- Väljudes
- väljub
- teadmised
- väline
- fail
- Faile
- finants-
- finantsandmed
- esimene
- Float
- ujuv
- Keskenduma
- Järel
- eest
- Alates
- funktsioon
- funktsionaalsus
- saama
- Go
- hea
- juhendid
- Käsitsemine
- õnnelik
- siin
- siin
- Suur
- võõrustaja
- Kuidas
- HTML
- HTTPS
- i
- if
- pilt
- import
- in
- sisaldama
- India
- info
- sisemine
- sees
- paigaldama
- selle asemel
- huvi
- huvitav
- ristmik
- sisse
- sisse
- IT
- ITS
- John
- jpg
- KDnuggets
- teadmised
- keel
- pärast
- Lekked
- õppinud
- õppimine
- Lets
- nagu
- meeldib
- nimekiri
- loogika
- Pikk
- Vaata
- näeb välja
- põhiline
- juhtima
- juhitud
- Juhid
- juhtiv
- matemaatika
- meetodid
- moodul
- rohkem
- MySQL
- Natural
- Loomulik keel
- Natural Language Processing
- Vajadus
- Uus
- järgmine
- ei
- nüüd
- esemeid
- of
- on
- kunagi
- ainult
- avatud
- Arvamus
- or
- Muu
- välja
- väljund
- üle
- parameetrid
- Parool
- tükki
- toru
- Kohad
- Platon
- Platoni andmete intelligentsus
- PlatoData
- Punkt
- Täpsus
- trükkimine
- jätkama
- protsess
- töötlemine
- Programming
- korralikult
- anda
- annab
- Python
- päringud
- kiiresti
- üsna
- juhuslik
- RE
- Lugemine
- nõutav
- ressurss
- Vahendid
- taastatud
- kaasa
- Tulemused
- Tulu
- jooks
- s
- ütlema
- teadus
- käsikiri
- Osa
- vaata
- valima
- andur
- komplekt
- jagamine
- ta
- näitama
- näidatud
- sarnane
- lihtne
- So
- midagi
- konkreetse
- väljavõte
- avaldused
- selline
- sobiv
- süntaks
- Puuduta
- Tehniline
- et
- .
- SIIS
- Seal.
- nad
- see
- Läbi
- et
- liiga
- Summa
- juhendaja
- õpetused
- tüüp
- kuni
- kasutama
- Kasutatud
- kasulik
- Kasutaja
- kasutusalad
- kasutamine
- kontrollima
- versioon
- W
- tahan
- we
- millal
- mis
- kuigi
- miks
- will
- koos
- jooksul
- Töö
- töövoog
- töö
- kirjutama
- kirjanik
- kirjutamine
- kirjutas
- sa
- sephyrnet