Pytonorm

Python Closures Tutorial

Python Closures Tutorial
En förslutning är en kapslad inre metod eller funktion som känner igen och har privilegiet att använda variablerna även efter att den yttre funktionen har slutförts i det lokala omfånget där den skapades. En variabel måste vara från en yttre funktion eller omfång och är inte säkert begränsad av det lokala utrymme som ska användas. Det finns tre funktioner i en Python-förslutning, dessa är som följer:

Kapslad funktion

Du måste först förstå vad en kapslad metod är. En kapslad funktion kan definieras som en metod som anges inom en annan metod. Rekursiva funktioner kan nå det yttre omfångets variabler. För att ändra de icke-lokala variablerna definierar vi dem specifikt som icke-lokala via icke-lokala sökord eftersom de till sin natur är skrivskyddade. Så först, ta en titt på den kapslade funktionen som utförs i Spyder Python 3.

Vi har definierat två funktioner: det yttre och det inre. I den yttre funktionen har vi deklarerat en variabel med något textvärde i.

def yttre_func ()
msg = 'Hy! Jag är Aqsa Yasin '

Denna variabel har skrivits ut i den inre funktionen med hjälp av ett utskriftsuttalande. Den inre funktionen returneras sedan, vilket är en kapslad funktion, och efter det har den yttre funktionen anropats.

def inner_func ()
skriva ut (msg)
returnera inner_func ()
inner_func ()

Om du inte använder nyckelordet return för att returnera den inre funktionen kommer det fortfarande att returnera samma resultat.

När du kör den här enkla koden returnerar den texten, definierad som värdet i variabeln 'msg'.

Utgång: Hy! Jag är Aqsa Yasin

Definiera nu samma typ av kapslad funktion utan returnyckelord och passande variabel 'msg' i parameter, och du får samma utdata.

Output: Hej

Enkel stängningsfunktion

Använd samma kod, med en liten förändring på de två sista raderna. Med strängen 'Hej', de visa_msg () metoden anropades och den returnerade metoden var knuten till ordet 'annan'. Medan du ringer annan(), texten 'Hej' återkallades fortfarande, medan visa_msg () metoden redan hade körts. Se till att lägga till variabeln 'msg' inom den yttre funktionen.

När du kör den här koden kommer den att visa att den inre funktionen, som är a show(), har tilldelats variabeln 'annan'.

Produktion: .visa på 0x0000020CCED4D820>

Du kan helt enkelt skriva ut namn av en funktion som tilldelats variabeln 'annan' som:

skriva ut (en annan.__namn__)

Det skickar ut namnet på en funktion.

Utgång: visa

Om du nu vill utföra denna variabel som en funktion, som andra metoder, kan du göra det genom att lägga till parentes och kalla det så här:

another = show_msg ("Hej")
annan()
annan()

Du kan ringa det så många gånger du vill.

När du kör den här koden kommer den att visas ungefär så här:

Produktion:

Hej

Hej

Hej

Nu kan du se att även efter avslutad utförande av den yttre funktionen kommer den inre funktionen fortfarande ihåg variablerna och andra saker som skapades eller definierades i det lokala utrymmet.

Stängningsfunktion med hjälp av parametrar

Nu har vi lagt till parametrar medan vi skickar en variabel i den yttre funktionen som:

def show_msg (msg)

Värdet som skickas till den yttre funktionsparametern tilldelas en variabel som definieras inom denna yttre funktion som:

Meddelande = msg

Skicka några strängvärden i de nyligen skapade variablerna på den sista raden, som:

func1 = show_msg ('Hej')
func2 = show_msg ('Hej')

Nu måste du kalla dessa funktioner så här:

func1 ()
func2 ()

Följande resultat visas i spyder-redigeringsbilden:

Inom Python heter den här processen, genom vilken alla data (Hej eller Hej för detta scenario) kopplas till skriptet, Stängning.

Enkel multiplikation med Python Closure

Vi har definierat två funktioner. En är yttre, som har multiplikator definierad, och den inre där värdet kommer att skickas medan du anropar funktionen. I den yttre funktionen har vi deklarerat en variabel med ett definierat multiplikatorvärde skickat i den. Detta multiplikatorvärde 'n' har multiplicerats med något värde 'x' som skickas i utskriftsuttalandet till den inre funktionen. Den inre funktionen returneras sedan, vilket är en kapslad funktion, och efter det har variabler anropats efter varandra i utskriftsuttalandena.

def out_multiply (n):
def in_multiply (x):
returnera x * n
återvänd i_multiply

Nu har den nya variabeln tilldelat något värde som ska skickas i parametern för den yttre funktionen. Detta värde sparas i variabeln 'n', vilket är en multiplikator definierad i den yttre funktionen:

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

Dessa variabler tilldelas fler värden som sparas i 'x' variabel definierad i den inre funktionen som måste multipliceras med multiplikator 'n'. När vi skriver ut variabeln som kallas 'tider', en funktion med något heltal 'x' tilldelad inom parentes kommer det att multipliceras med det yttre funktionsvärdet 'n'.

Den första kommer utgång 27 medan du utför utskriftsuttalande eftersom variabel 'n' har 3 som en multiplikator, och vi har gett 9 som ett annat heltal som ska multipliceras.

skriva ut (times3 (9))

Den andra kommer utgång 15 medan du utför utskriftsuttalandet eftersom variabeln 'n' har 3 som en multiplikator, och vi har gett 5 som ett annat heltal som ska multipliceras.

skriva ut (times5 (3))

Den sista kommer utgång 30 medan du kör ett utskriftsuttalande eftersom det har rekursivt kallat times to function variabel. Första gången har tiderna gjort det 'n' har 3 som en multiplikator, som kommer att multipliceras med heltal 2. Vid multiplikation kommer den att matas ut 6. Nu kommer denna 6 att användas som ett värde och sedan skickas som ett argument till tidernas variabla funktion, där 'n' variabel multiplikator är 5. Så när 5 multipliceras med 6 det kommer att matas ut 30.

skriva ut (times5 (times3 (2)))

Du kan se produktionen i Spyder-redigerarens konsol.

Slutsats

Stängningar kan förhindra att globala värden används och har en form av data som gömmer sig. Det kan också ge ett objekt- eller enhetsorienterat tillvägagångssätt. Förhoppningsvis, efter att ha följt den här guiden, kommer du att kunna förvärva grunderna för Python-stängning.

Strid om Wesnoth 1.13.6 Utveckling släppt
Strid om Wesnoth 1.13.6 släpptes förra månaden, är den sjätte utvecklingsversionen i 1.13.x-serien och den levererar ett antal förbättringar, framför ...
Så här installerar du League Of Legends på Ubuntu 14.04
Om du gillar League of Legends är det här en möjlighet för dig att testa League of Legends. Observera att LOL stöds på PlayOnLinux om du är en Linux-a...
Installera det senaste OpenRA-strategispelet på Ubuntu Linux
OpenRA är en Libre / Free Real Time Strategy-spelmotor som återskapar de tidiga Westwood-spelen som det klassiska Command & Conquer: Red Alert. Distri...