Python

Zelfstudie Python Sluitingen

Zelfstudie Python Sluitingen
Een sluiting is een geneste innerlijke methode of functie die de variabelen herkent en het voorrecht heeft om deze te gebruiken, zelfs nadat de buitenste functie is uitgevoerd in het lokale bereik waarin deze is gemaakt. Een variabele moet van een buitenste functie of bereik zijn en is niet zeker begrensd in de lokale ruimte die moet worden gebruikt. Er zijn drie kenmerken van een Python-sluiting, deze zijn als volgt:

Geneste functie

Je moet eerst begrijpen wat een geneste methode is. Een geneste functie kan worden gedefinieerd als een methode die is opgegeven binnen een andere methode. Recursieve functies kunnen de variabelen van het buitenste bereik bereiken. Om de niet-lokale variabelen te wijzigen, definiëren we ze specifiek als niet-lokaal via niet-lokale trefwoorden omdat ze van nature alleen-lezen zijn. Kijk dus eerst eens naar de geneste functie die wordt uitgevoerd in Spyder Python 3.

We hebben twee functies gedefinieerd: de buitenste en de binnenste. In de buitenste functie hebben we een variabele gedeclareerd met een tekstwaarde erin.

def outer_func()
msg = 'Hy! Ik ben Aqsa Yasin'

Deze variabele is afgedrukt in de inner functie met behulp van een print statement. De innerlijke functie wordt dan geretourneerd, wat een geneste functie is, en daarna is de buitenste functie aangeroepen.

def inner_func()
afdrukken (bericht)
return inner_func()
inner_func()

Als je het sleutelwoord return niet gebruikt om de innerlijke functie terug te geven, zal het nog steeds hetzelfde resultaat opleveren.

Wanneer u deze eenvoudige code uitvoert, krijgt u de tekst terug, gedefinieerd als de waarde in de variabele 'bericht'.

Uitgang: Hy! Ik ben Aqsa Yasin

Definieer nu hetzelfde type geneste functie zonder return-trefwoord en het doorgeven van variabele 'bericht' in parameter, en je krijgt dezelfde output.

Uitgang: Hallo

Eenvoudige sluitingsfunctie

Gebruik dezelfde code, met een kleine wijziging aan de laatste twee regels. Met het touwtje 'Hallo', de show_msg() methode werd aangeroepen en de geretourneerde methode was gekoppeld aan het woord 'een ander'. Tijdens het bellen een ander(), de tekst 'Hallo' werd nog steeds teruggeroepen, terwijl de show_msg() methode was al uitgevoerd. Zorg ervoor dat u de variabele toevoegt 'bericht' binnen de uiterlijke functie.

Wanneer je deze code uitvoert, zal het laten zien dat de innerlijke functie, dat is a tonen(), is toegewezen aan de variabele 'een ander'.

Uitgang: .toon op 0x0000020CCED4D820>

U kunt de naam van een functie toegewezen aan variabele 'een ander' net zo:

print(andere).__naam__)

Het zal de naam van een functie uitvoeren.

Uitgang: tonen

Als u deze variabele nu als een functie wilt uitvoeren, zoals andere methoden, kunt u dit doen door haakjes toe te voegen en deze als volgt aan te roepen:

een andere = show_msg ("Hallo")
een ander()
een ander()

Je kunt dit zo vaak bellen als je wilt.

Wanneer u deze code uitvoert, wordt er zoiets als dit weergegeven:

Uitgang:

Hallo

Hallo

Hallo

Nu kun je zien dat zelfs na het voltooien van de uitvoering van de buitenste functie, de binnenste functie nog steeds de variabelen en andere dingen onthoudt die zijn gemaakt of gedefinieerd in de lokale ruimte.

Sluitingsfunctie met behulp van parameters:

Nu hebben we parameters toegevoegd terwijl we een variabele in de buitenste functie doorgeven als:

def show_msg(msg)

De waarde die in de buitenste functieparameter wordt doorgegeven, wordt toegewezen aan een variabele die binnen deze buitenste functie is gedefinieerd als:

Bericht = bericht

Geef enkele tekenreekswaarden door in de nieuw gemaakte variabelen op de laatste regel, zoals:

func1 = show_msg('Hallo')
func2 = show_msg('Hallo')

Nu moet je deze functies als volgt aanroepen:

func1()
func2()

U krijgt de volgende uitvoer die wordt weergegeven in de afbeelding van de spyder-editor:

Binnen Python heet dit proces, waarbij alle gegevens (Hallo of Hallo voor dit scenario) aan het script worden gekoppeld, Sluiting.

Eenvoudige vermenigvuldiging met Python Closure

We hebben twee functies gedefinieerd:. De ene is de buitenste, waarvoor de vermenigvuldiger is gedefinieerd, en de binnenste waarin de waarde wordt doorgegeven tijdens het aanroepen van de functie. In de buitenste functie hebben we een variabele gedeclareerd waarin een gedefinieerde vermenigvuldigingswaarde is doorgegeven. Deze vermenigvuldigingswaarde 'n' is vermenigvuldigd met een bepaalde waarde 'X' die in de print-instructie wordt doorgegeven aan de innerlijke functie. De innerlijke functie wordt dan geretourneerd, wat een geneste functie is, en daarna zijn variabelen achter elkaar aangeroepen in de printinstructies.

def out_multiply(n):
def in_multiply(x):
retour x * n
return in_multiply

Nu heeft de nieuwe variabele een waarde toegewezen die moet worden doorgegeven in de parameter van de buitenste functie. Deze waarde wordt opgeslagen in de variabele 'n', wat een vermenigvuldiger is gedefinieerd in de buitenste functie:

times3 = out_multiply(3)
times5 = out_multiply(5)

Aan deze variabelen zullen meer waarden worden toegewezen, die worden opgeslagen in de 'X' variabele gedefinieerd in de innerlijke functie die moet worden vermenigvuldigd met vermenigvuldiger 'n'. Wanneer we de variabele met de naam 'tijden' afdrukken, een functie met een geheel getal 'X' toegewezen tussen haakjes zal het vermenigvuldigen met de buitenste functiewaarde 'n'.

De eerste zal uitgang 27 tijdens het uitvoeren van de afdrukopdracht omdat variabele 'n' heeft 3 als een vermenigvuldiger, en we hebben gegeven 9 als een ander geheel getal dat moet worden vermenigvuldigd.

print(time3(9))

De tweede zal uitgang 15 tijdens het uitvoeren van de print-instructie omdat variabele 'n' heeft 3 als een vermenigvuldiger, en we hebben gegeven 5 als een ander geheel getal dat moet worden vermenigvuldigd.

print(time5(3))

De laatste zal uitgang 30 tijdens het uitvoeren van een print-instructie omdat het recursief times heeft aangeroepen om variabele te functioneren. De eerste keer, tijden hebben 'n' hebben 3 als een vermenigvuldiger, die wordt vermenigvuldigd tot geheel getal 2. Bij vermenigvuldiging zal het output 6. Deze 6 wordt nu gebruikt als een waarde en vervolgens als argument doorgegeven aan de variabele functie times, waarbij de 'n' variabele vermenigvuldiger is 5. Dus wanneer 5 wordt vermenigvuldigd met 6 het zal output 30.

print(times5(times3(2)))

U kunt de uitvoer zien in de console van Spyder-editor.

Conclusie

Sluitingen kunnen voorkomen dat globale waarden worden gebruikt en hebben een vorm van gegevensverberging have. Het kan ook een object- of entiteitgerichte benadering van het probleem bieden. Hopelijk kun je na het volgen van deze handleiding de basisprincipes van Python-afsluiting leren.

OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...
OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...