Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Sisäkkäiset ja useat kontekstinhallitsijat | Advanced File Handling & Context Managers
Pythonin Rakenteellinen Ohjelmointi

Sisäkkäiset ja useat kontekstinhallitsijat

Pyyhkäise näyttääksesi valikon

Kun työskentelet useiden resurssien kanssa Pythonissa – esimerkiksi avaat useamman tiedoston samanaikaisesti – on tärkeää varmistaa, että jokainen resurssi otetaan käyttöön ja vapautetaan oikein. Tässä kohtaa sisäkkäiset ja useat kontekstinhallitsijat ovat erityisen hyödyllisiä. Yllä oleva video esittelee kaksi lähestymistapaa: with-lauseiden sisäkkäisen käytön sekä useiden kontekstinhallitsijoiden käytön yhdellä rivillä.

Sisäkkäiset with-lauseet tarkoittavat, että yksi with-lohko sijoitetaan toisen sisään. Tämä on hyödyllistä, kun yhden resurssin käyttö riippuu toisesta. Esimerkiksi voit lukea yhdestä tiedostosta ja kirjoittaa toiseen, varmistaen, että molemmat tiedostot hallitaan oikein:

with open('input.txt', 'r') as infile:
    with open('output.txt', 'w') as outfile:
        for line in infile:
            outfile.write(line.upper())

Python mahdollistaa kuitenkin myös molempien tiedostojen avaamisen yhdellä with-lauseella, erottamalla jokainen kontekstinhallitsija pilkulla. Tämä lähestymistapa tekee koodista selkeämpää ja takaa, että jokainen resurssi vapautetaan päinvastaisessa järjestyksessä kuin ne otettiin käyttöön. Tämä tarkoittaa, että viimeisenä avattu resurssi suljetaan ensimmäisenä, kun lohko päättyy.

# Open two files simultaneously using a single 'with' statement
with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:
    for line in infile:
        outfile.write(line.lower())
# When the block ends, outfile is closed first, then infile

Useiden kontekstinhallitsijoiden käyttäminen yhdellä rivillä ei ole pelkkää syntaktista helpotusta – se on vankka tapa hallita useita resursseja samanaikaisesti. Tämä on erityisen tärkeää työskenneltäessä tiedostojen, verkkoyhteyksien tai lukkojen kanssa, jotka on aina vapautettava oikein resurssivuotojen tai deadlockien välttämiseksi.

Note
Lisätietoa
question mark

Mikä väite kuvaa oikein resurssien vapautusjärjestyksen, kun käytetään useita kontekstinhallitsijoita yhdessä with-lauseessa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 2. Luku 6
some-alt