Python

Python Closures Tutorial

Python Closures Tutorial
En lukning er en indlejret indre metode eller funktion, der genkender og har privilegiet at bruge variablerne, selv efter at den ydre funktion er færdig med at udføres i det lokale omfang, hvor den blev oprettet. En variabel skal være fra en ydre funktion eller rækkevidde og er bestemt ikke afgrænset i det lokale rum, der skal bruges. Der er tre funktioner i en Python-lukning, disse er som følger:

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: .vis på 0x0000020CCED4D820>

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 = msg

Send 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.

Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
OpenTTD vs Simutrans
Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...