Python med nøkkelord

Python med nøkkelord

“I Python brukes med nøkkelord for å gjøre koden tydeligere og mer forståelig. Det gjør vanlige ressurser, for eksempel filstrømmer lettere å håndtere. "Med" nøkkelordet i Python erstatter en enkel korthet for en prøvefangstblokk. Det sikrer også at ressursene er stengt umiddelbart etter å ha blitt behandlet. Et populært tilfelle av å bruke "med" nøkkelordet er å lese/skrive til en fil. En kontekstbehandler er en metode eller klasse som hjelper brukere med nøkkelord. En kontekstsjef tillater deg å åpne og lukke ressurser etter behov. Tenk på hvor bruken av med nøkkelord renser opp koden i følgende eksempler.”

Eksempel 1: Filhåndtering uten "med" nøkkelord

For det første har vi vist de to eksemplene på filhåndtering uten
“Med” nøkkelord. Her kan vi ganske enkelt åpne filen my_file i skrivemodus “w.”Med skrivemetoden; Vi har satt inn teksten i filen. Filen er lukket ved å påkalle den nære metoden.

Du kan finne ut at teksten er innlemmet i My_File.

Det er et annet eksempel på å håndtere filen med prøvefangstblokken.

Ovennevnte skript har følgende utgang.

Eksempel 2: Filhåndtering med "med" nøkkelord

Nå, i det følgende eksemplet, bruker du "med" nøkkelord for filhåndtering.

Det er ikke nødvendig å ringe filer bortsett fra de to første implementeringene. Når du bruker "med" nøkkelord, kalles lukk (). "Med" -erklæringen sikrer at ressursene oppnås og frigjøres ordentlig. Under filen er det et unntak. Skriving () -funksjonen i den første tilnærmingen kan forby filen å lukke ordentlig, noe. Slik tillater vi nøkkelordet oss å skrive i filen. Filteksten vises i my_filen.

Den andre løsningen i foregående eksempel håndterer alle unntak, men å bruke "med" nøkkelord gjør koden mye mer kortfattet og klar. Som et resultat hjelper med uttalelsen til å unngå problemer og rømming ved å bekrefte at et objekt blir gitt fra seg når koden som bruker den utføres fullt ut. Med nøkkelord brukes ofte sammen med filstrømmene, som demonstrert ovenfor, samt låser, stikkontakter, underprosesser, telnet og andre typer tilkoblinger.

Eksempel 3: Brukerdefinert filhåndtering med "med" nøkkelord

Det er ikke noe uvanlig med Open () som gjør det egnet for bruk med "med" nøkkelord, siden den samme muligheten kan bli funnet i brukerdefinerte objekter. Ved å bruke et "med" nøkkelord i objektene dine, vil du aldri la en ressurs være åpen. Prosedyrene __enter __ () og __exit __ () I objektoperasjonene er alt som kreves for å bruke "med" nøkkelord i brukerdefinerte objekter. Ta en titt på koden under for ytterligere informasjon.

La oss se på den ovennevnte koden. Funksjonsobjektet () til MessageWriter er umiddelbart etter "med" nøkkelordet, som du kan se. Python oppretter et MessageWriter -objekt og utfører deretter __Enter __ () -metoden så snart programmet når området til "med" nøkkelordet. I denne __enter __ () -metoden, spesifiser ressursen som skal brukes i objektet. Beskrivelsen for den oppnådde ressursen skal alltid returneres med denne __enter __ () -metoden.

Teksten er lagret i my_file3.txt her av python “med” nøkkelord.

Eksempel 4: Bruke ContextLib -pakken for filhåndtering med "med" nøkkelord

Operativsystemet gir disse håndtakene for tilgang til de nødvendige ressursene. Her er filstrømsressursbeskrivelsen arkivert i den påfølgende kodeblokken.

__Enter __ () -teknikken genererer og returnerer en filbeskrivelse i meldingsforskriverprøven som er nevnt ovenfor. Enter () -metoden returneres av en filbeskrivelse som blir referert til som en fil i dette eksemplet. Inne i "med" uttalelsen er den delen av koden som bruker den ervervede ressursen. __Exit __ () -prosedyren blir vurdert når programmet inne i "med" kroppen har blitt kjørt. I __exit __ () metoden blir alle ressursene som samles fra seg gitt fra seg. Med brukerdefinerte objekter bruker vi "med" nøkkelord på denne måten.

Kontekstbehandler:

Context Manager refererer til grensesnittet til __enter __ () og __exit __ () -operasjoner som aktiverer "med" nøkkelordet i brukerdefinerte objekter.

Den ovennevnte klassebaserte kontekstbehandleren er ikke den eneste tilnærmingen for å aktivere "med" nøkkelord i brukerdefinerte objekter. ContextLib -modulen utvider det grunnleggende Context Manager -grensesnittet med noen få ekstra abstraksjoner. Ved hjelp av ContextLib -modulen kan Object MessageWriter oppdateres av Context Manager.

Funksjonen åpen fil () er en generatormetode i denne kodeprøven på grunn av den generelle avkastningserklæringen i sin definisjon.

Når den åpne filen () -funksjonen brukes, opprettes en eiendomsbeskrivelse som heter filen. Innringeren blir deretter tildelt denne ressursbeskrivelsen, som er representert ovenfor av variabelen filen min. Programkontrollen går tilbake til Open File () -metoden etter at programmet inne i delen er kjørt. Den åpne filen () -metoden gjenopptar utførelsen etter avkastningserklæringen og utfører koden som følger den. Denne delen av koden oppstår like etter avkastningserklæringen og frigjør ressursene som er anskaffet. @ContextManager er en dekoratør i dette tilfellet.

Internt er den gamle klassebaserte versjonen av kontekstledere og den nye generatorbaserte implementeringen identisk. Selv om sistnevnte ser ut til å være mer lesbar, nødvendiggjør det en forståelse av generatorer, dekoratører og utbytte.

Ved hjelp av ContextLib har vi med hell lagret posten i my_file4.txt med "med" nøkkelord som følger:

Konklusjon

Per nå har vi sett hvordan "med" uttalelsen håndterer unntak intelligent. Det "med" nøkkelordet hjelper også med å lukke kontekstbehandleren, som kan ha blitt stående åpent under programmering. Med nøkkelordet er en erstatning for prøvetilstandene for forsøk/endelig feilhåndtering som ofte brukes. Vi har vist noen tilfeller av å bruke "med" nøkkelord for filhåndtering.