- Det skal være en indlejret metode / funktion.
- Den skal have adgang til en gratis variabel i det ydre rum.
- Det skal vende tilbage fra den ydre funktion.
Indlejret funktion
Du skal først forstå, hvad en indlejret metode er. En indlejret funktion kan defineres som en metode specificeret inden for en anden metode. Rekursive funktioner kan nå det ydre omfangs variabler. For at ændre de ikke-lokale variabler definerer vi dem specifikt som ikke-lokale via ikke-lokale nøgleord, fordi de af natur er skrivebeskyttede. Så se først på den indlejrede funktion udført i Spyder Python 3.
Vi har defineret to funktioner: den ydre og den indre. I den ydre funktion har vi deklareret en variabel med en vis tekstværdi i.
def ydre_func ()msg = 'Hy! Jeg er Aqsa Yasin '
Denne variabel er blevet udskrevet i den indre funktion ved hjælp af en udskriftserklæring. Den indre funktion returneres derefter, hvilket er en indlejret funktion, og derefter er den ydre funktion blevet kaldt.
def inner_func ()udskrive (msg)
returner inner_func ()
inner_func ()
Hvis du ikke bruger nøgleordet return for at returnere den indre funktion, returnerer det stadig det samme resultat.
Når du kører denne enkle kode, returnerer den teksten, defineret som værdien i variablen 'msg'.
Output: Hy! Jeg er Aqsa Yasin
Definer nu den samme type indlejrede funktion uden returneringsnøgleord og passerende variabel 'msg' i parameter, og du får den samme output.
Output: Hej
Enkel lukningsfunktion
Brug den samme kode med en lille ændring på de to sidste linjer. Med strengen 'Hej', det show_msg () metode blev påberåbt, og den returnerede metode var bundet til ordet 'en anden'. Mens du ringer en anden(), teksten 'Hej' blev stadig tilbagekaldt, mens show_msg () Metoden var allerede kørt. Sørg for at tilføje variablen 'msg' inden for den ydre funktion.
Når du kører denne kode, vil den vise, at den indre funktion, som er en at vise(), er tildelt variablen 'en anden'.
Produktion:
Du kan blot udskrive navn af en funktion tildelt variabel 'en anden' som:
udskrive (en anden.__navn__)
Det sender navnet på en funktion.
Output: Vis
Nu, hvis du vil udføre denne variabel som en funktion, som andre metoder, kan du gøre det ved at tilføje parentes og kalde det sådan:
en anden = show_msg ("Hej")en anden()
en anden()
Du kan ringe til det så mange gange som du ønsker.
Når du kører denne kode, viser den noget som dette:
Produktion:
Hej
Hej
Hej
Nu kan du se, at selv efter afslutningen af udførelsen af den ydre funktion, husker den indre funktion stadig variablerne og andre ting, der blev oprettet eller defineret i det lokale rum.
Lukningsfunktion ved hjælp af parametre
Nu har vi tilføjet parametre, mens vi sender en variabel i den ydre funktion som:
def show_msg (msg)Værdien, der sendes til den ydre funktionsparameter, tildeles en variabel, der er defineret inden for denne ydre funktion som:
Besked = msgSend nogle strengværdier i de nyoprettede variabler på den sidste linje, som:
func1 = show_msg ('Hej')func2 = show_msg ('Hej')
Nu skal du kalde disse funktioner sådan:
func1 ()func2 ()
Du får følgende output vist i spyder-editorbilledet:
Inden for Python hedder denne proces, hvorved data (Hej eller Hej for dette scenarie) knyttes til scriptet, Lukning.
Enkel multiplikation ved hjælp af Python Closure
Vi har defineret to funktioner. Den ene er ydre, som har defineret multiplikator, og den indre, hvor værdien vil blive videregivet, mens funktionen kaldes. I den ydre funktion har vi deklareret en variabel med en defineret multiplikatorværdi sendt i den. Denne multiplikatorværdi 'n' er blevet ganget med en vis værdi 'x' der sendes i udskriftserklæringen til den indre funktion. Den indre funktion returneres derefter, hvilket er en indlejret funktion, og derefter er variabler blevet kaldt efter hinanden i udskriftsudsagnene.
def ud_multiply (n):def in_multiply (x):
returnere x * n
vende tilbage i_multiply
Nu har den nye variabel tildelt en værdi, der skal sendes i parameteren for den ydre funktion. Denne værdi gemmes i variablen 'n', som er en multiplikator defineret i den ydre funktion:
times3 = out_multiply (3)times5 = out_multiply (5)
Disse variabler tildeles flere værdier, som gemmes i 'x' variabel defineret i den indre funktion, der skal ganges med multiplikator 'n'. Når vi udskriver variablen kaldet 'gange', en funktion med en hel helhedsværdi 'x' tildelt i parentes, vil det formere sig med den ydre funktionsværdi 'n'.
Den første vil udgang 27 under udførelse af udskriftserklæring, fordi variabel 'n' har 3 som en multiplikator, og vi har givet 9 som et andet heltal, der skal multipliceres.
udskriv (times3 (9))Den anden vil udgang 15 under udførelse af udskriftserklæringen, fordi variabel 'n' har 3 som en multiplikator, og vi har givet 5 som et andet heltal, der skal multipliceres.
udskriv (times5 (3))Den sidste vil udgang 30 mens du kører en udskriftserklæring, fordi den rekursivt har kaldt times to function variable. Den første gang har tiderne gjort 'n' at have 3 som en multiplikator, som multipliceres med heltal 2. Ved multiplikation udsendes det 6. Nu vil denne 6 blive brugt som en værdi og derefter videregives som et argument til tidens variabelfunktion, hvor 'n' variabel multiplikator er 5. Så når 5 ganges med 6 det vil output 30.
udskriv (times5 (times3 (2)))
Du kan se output i konsollen til Spyder editor.
Konklusion
Lukninger kan forhindre anvendelse af globale værdier og skjule en form for data. Det kunne også give en objekt- eller enhedsorienteret tilgang til problemet. Forhåbentlig vil du, efter at have fulgt denne vejledning, være i stand til at erhverve det grundlæggende i Python-lukning.