Python -stenginger

Python -stenginger
Vi må forstå de nestede funksjonene og de ikke-lokale variablene før vi kan forstå hva python-lukking er.

Funksjonene skrevet i Python regnes som førsteklasses objekter. Tilsvarende status for de andre objektene er gitt til funksjoner i Python. Funksjoner kan opprettes og ødelegges dynamisk, tilordnet variabler, lagret i samlinger, levert som argumenter og mer. Begrepet "nestede funksjoner", noen ganger kjent som "indre funksjoner", refererer til funksjoner som er definert i de andre funksjonene.


Det er en nestet funksjon som heter Build Message. Den ytre hovedfunksjonen er der den er definert og kalt.

I sin mest grunnleggende form er lukking bare en nestet funksjon som har tilgang til en gratis variabel til overs etter utførelsen av en vedlagt funksjon er fullført. En python -nedleggelse har disse tre egenskapene:

    • Det er nestet i funksjonen.
    • Den har tilgang til en gratis variabel utenfor omfanget.
    • Den omkringliggende funksjonen returnerer den.

Enhver variabel som er ubundet i det lokale omfanget sies å være gratis. Det ikke-lokale nøkkelordet er nødvendig for at nedleggelser skal fungere med uforanderlige variabler som strenger og heltall. Python -stenginger tilbyr en slags datamasking og hjelper til med å unngå bruk av globale variabler.

Omfang av variabler

Vi må også lære om Python -variabelt omfang for å forstå nedleggelsene mer fullstendig. Omfanget er en slik region der variabelen er observerbar. Bare det spesifiserte området for en variabel kan brukes. I henhold til de tre forskjellige omfangene, kan variabler ofte tildeles på tre separate steder:

    • Globalt omfang: En variabel definisjon når den er utenfor alle funksjoner. Enhver funksjon i koden kan enkelt bruke en global variabel.
    • Lokalt omfang: En variabel er lokal for en funksjon når den er erklært inne i den. En lokal variabel kan bare nås fra innsiden av en slik funksjon der den er erklært.
    • Ikke -lokal omfang: En tildelt variabel er ikke -lokal til nestede funksjoner når den brukes i den omkringliggende funksjonen. Funksjonen der en ikke -lokal variabel ble definert, så vel som alle dens indre funksjoner kan få tilgang til den variabelen.

Hvorfor bruke stenginger?

De viktigste årsakene til at vi ansetter dekoratører er skissert i følgende liste:

    • Det faktum at Python -stenginger tilbyr en form for datamasking som tilbakeringingsfunksjoner er en av de viktigste fordelene ved å bruke dem. Følgelig reduseres bruken av globale variabler
    • Kodestørrelse kan reduseres under noen omstendigheter ved å bruke nedleggelsene i stedet for klasser.
    • Når du erstatter hardkodede konstanter, er stenginger et godt valg.
    • Den dekorative funksjonen til nedleggelser er svært gunstig.

Når skaper Python nedleggelsen?

Python skaper et nytt omfang hver gang en funksjon påkalles. Python produserer i tillegg en fersk lukking hvis den funksjonen produserer en.


Lag en funksjon som heter multiplikator som produserer en nedleggelse først. Multiplikasjonen av to innganger er hva multiplikatorfunksjonen returnerer. Men det bruker en nedleggelse i stedet for det. Legg til tre samtaler i multiplikatorfunksjonen neste. Tre nedleggelser produseres ved å kalle disse funksjonene. Et tall multipliseres med 2, 4 og 5 etter hver funksjon. Kjør deretter nedleggelsesfunksjonene.

Eksempel 1:

For å påkalle en indre funksjon fra utenfor den ytre funksjonen, må vi først finne ut hvordan. Disse metodene kan returnere en verdi. Her er “T” og “U” lokale variabler av funksjonen f ().


Siden variablene “T” og “U” ikke lenger kan nås etter å ha kjørt H = F (), er alle f (lokale) variabler borte. Imidlertid beholder vi fortsatt "T" -verdien som ble returnert og lagret i H. Vi kan dermed være i stand til å få den ytre funksjonen til å returnere innsidenfunksjonen. Pythons førsteklasses funksjoner gjør det mulig for dette. Det innebærer at fordi Python tolker funksjonene som verdier, kan du tilordne dem til variablene, gi dem som funksjonsargumenter, eller ha en annen funksjon returner dem.

Eksempel 2:

Dette eksemplet viser at den indre funksjonen "G" returneres av den ytre funksjonen f (t).


Funksjonen g () blir nå returnert av uttrykket f (t). Ved å tilordne verdien av “G” til “H” når vi skriver H = F (i), kan “H” nå betraktes som “G” og ta Gs argument. H (j) tilsvarer å kalle “g” som et resultat (j).

Eksempel 3:

Funksjonen g (), ikke en bestemt verdi av det, er det f (t) returnerer. Ta dette tilfellet i betraktning for dette, og skriv følgende:


Denne koden returnerer en feil. Det betyr at vi møtte en feil. Vi kan ikke bruke “H” for å påkalle en funksjon siden vi returnerer resultatet av G (u) fra F (t), som er en grunn til feilen.

Eksempel 4:

Vi trenger ikke å holde f (a) i “h”. Alternativet er å ringe F (a) direkte (b). Tenk på følgende illustrasjon:


Behovet for å gjøre en forskjell mellom f (a, b) og f (a) må alltid huskes (b). Det krever to parametere for å kalle funksjonen f (a, b). Funksjonen f (a) (b) er derimot en serie med nestede funksjoner, som hver bare godtar en inngang. Kjent som en unary -funksjon, godtar denne typen funksjoner bare en inngang. Følgelig er f (a) (b) en serie med to nestede unary -funksjoner. Så f (a) blir først vurdert. For å kjede disse funksjonene sammen, bør f (a) returnere en funksjon. Her returnerer den den interne funksjonen “G”. Følgelig f (a) (b) = g (b).

Eksempel 5:

Bruken av en lengre serie unary -funksjoner er ganske enkelt mulig ved å utvide den nåværende tilnærmingen. De tre nestede unary -funksjonene kan også sees i dette tilfellet. Den første funksjonen, f (t), har en funksjon innen den kalt g (u), og g (u) har en funksjon inne i den kalt h (v). Hver indre funksjon returneres etter den ytre funksjonen.


Her definerer vi funksjonene. Disse funksjonene returnerer verdiene. Deretter initialiserer vi tre variabler og tildeler dem tre forskjellige heltall. Deretter kaller vi disse variablene funksjonene til funksjon.

Eksempel 6:

Anta at det er noen ikke -lokale variabler i den ytre funksjonen. La oss se hva som skjer.


Å kjøre den demonstrerer at den fungerer uten problemer og at g (u) har tilgang til både “T” og “V”. Hvordan er det imidlertid til og med tenkelig? Nå som vi er utenfor Fs Review (T), bør ikke "T" og "V" kunne nås etter at F (t) utføres. Hvorfor er G (u) fremdeles i stand til å få tilgang til dem? Det er av grunnen til at G (u), den indre funksjonen, nå er en nedleggelse.

Eksempel 7:

La oss endre den interne funksjonen som brukes i dette tilfellet.


Hvis det skjer, kan det ikke lenger sies å være en nedleggelse. Forklaringen er at G (u) ikke får tilgang til de ikke -lokale variablene “T” og “V”. Derfor er ikke g (u) pålagt å registrere dem.

Eksempel 8:

I dette tilfellet vil vi se om vi angir verdiene til to parametere for funksjonene som er like, så er den funksjonen satt til å være en lukking eller ikke.


Nok en gang er “T” bare nødvendig for å initialisere “u” i dette tilfellet. Derfor er ikke g (u) en nedleggelse fordi "g" trenger ikke å erklære "t".

Konklusjon

I denne guiden snakket vi om Python -nedleggelsen. Vi utførte også de forskjellige kodene relatert til dette emnet. Vi krever en funksjon innenfor nedleggelsen for å definere følgende:

    • Den ytre funksjonen må gi den tilbake.
    • Noen av den ytre funksjonens ikke-lokale variabler burde fanges opp av den. Disse variablene kan enten nås direkte, erklæres som ikke -lokale variabler, eller må fanges opp med en nestet lukking.

Med andre ord, en funksjon og et utvidet omfang med frie variabler blir begge vurdert stenginger. Å kalle den ytre funksjonen for å returnere nedleggelsen er nødvendig etter å ha erklært nedleggelsen for å initialisere den.