Bestå reference vs værdi i Python
Udviklere, der hopper ind i Python-programmering fra andre sprog som C++ og Java, bliver ofte forvirrede over processen med at sende argumenter i Python. Den objektcentrerede datamodel og dens behandling af opgave er årsagerne til forvirringen på det grundlæggende niveau.
I artiklen vil vi diskutere begrebet hvordan man sender en værdi ved reference i Python og prøv at forstå forbigående eksempler i Python.
Indholdsfortegnelse
- Pass by Value og Pass by Reference i Python
- Variablen er ikke objektet
- Hvad er Pass by Reference i Python?
- Hvad er Pass by Value i Python?
Pass by Value og Pass by Reference i Python
Du vil måske slå til noget, efter du har læst videre, så vær klar. Pythons argumentoverførselsmodel er hverken Pass by Value eller Pass by Reference, men det er Pass by Object Reference.
Afhængigt af typen af objekt, du sender i funktionen, opfører funktionen sig anderledes. Uforanderlige objekter viser pass by-værdi, mens mutable objekter viser pass by reference.
Du kan kontrollere forskellen mellem pass-by-value og pass-by-reference i eksemplet nedenfor:
Python3
def> call_by_value(x):> > x> => x> *> 2> > print> (> 'in function value updated to'> , x)> > return> > def> call_by_reference(> list> ):> > list> .append(> 'D'> )> > print> (> 'in function list updated to'> ,> list> )> > return> > my_list> => [> 'E'> ]> num> => 6> print> (> 'number before='> , num)> call_by_value(num)> print> (> 'after function num value='> , num)> print> (> 'list before'> ,my_list)> call_by_reference(my_list)> print> (> 'after function list is '> ,my_list)> |
Produktion
number before= 6 in function value updated to 12 after function num value= 6 list before ['E'] in function list updated to ['E', 'D'] after function list is ['E', 'D']
I ovenstående kode har vi vist, hvordan Python bruger call by reference objektkonceptet i sit program.
Vi sender et heltal i funktionen call_by_value(). Heltal er uforanderlige objekter, derfor arbejder Python efter kald efter værdi, og ændringerne i funktionen afspejles ikke uden for funktionen.
Vi videregiver derefter listen til funktion ved reference. I funktionen call_by_reference() sender vi en liste, der er et foranderligt objekt. Python fungerer i henhold til call by reference i denne funktion, og ændringerne i funktionen kan også ses uden for funktionen.
Variablen er ikke objektet
Her er a en variabel, der peger på en liste, der indeholder elementerne X og Y. Men a selv er ikke en liste. Betragt a for at være en spand, der indeholder objektet X og Y.
a = ['X', 'Y']
Hvad er Pass by Reference i Python?
Pass by reference betyder, at du skal videregive funktionen (reference) til en variabel, hvilket betyder, at variablen allerede findes i hukommelsen.
Her sendes variablen (bøtten) direkte ind i funktionen. Variablen fungerer som en pakke, der følger med dens indhold (objekterne).
I ovenstående kodebillede er både list og my_list den samme containervariabel og refererer derfor til det samme objekt i hukommelsen. Enhver handling udført af funktionen på variablen eller objektet vil blive direkte afspejlet af funktionskalderen. For eksempel kunne funktionen fuldstændig ændre variablens indhold og pege den på et helt andet objekt:
Funktionen kan også gentildele indholdet af variablen med samme effekt som nedenfor:
For at opsummere, i pass-by-reference, bruger funktionen og kalderen den samme variabel og objekt.
Gå forbi reference i Python-eksempel
I dette eksempel tager funktionen modify_list en liste ved reference. Funktionen tilføjer strengen Geeks til den beståede liste inde i funktionen og udskriver den. Da lister er foranderlige datatyper, afspejles ændringerne i listen inde i funktionen også uden for funktionen, som du kan se i outputtet.
Python3
def> modify_list(x):> > x.append(> 'Geeks'> )> > print> (> 'Inside function:'> , x)> > my_list> => [> 'Geeks'> ,> 'for'> ]> modify_list(my_list)> print> (> 'Outside function:'> , my_list)> |
Produktion
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']
Hvad er Pass by Value i Python?
I denne tilgang sender vi en kopi af det faktiske variable i funktionen som parameter. Derfor vil enhver ændring af parametre inde i funktionen ikke afspejle i den faktiske variabel.
Det samme gælder for enhver operation udført af funktionen på variablen eller objektet
For at opsummere er kopierne af variablerne og objekterne i sammenhæng med den, der kalder funktionen, fuldstændigt isolerede.
Gå forbi værdi i Python-eksempel
Her vil vi videregive hele tallet x til funktionen, som er en uforanderlig datatype. Vi opdaterer derefter værdien af hele tallet inde i funktionen og udskriver den opdaterede værdi. Ændringerne ses ikke uden for funktionen, da heltal er uforanderlige datatyper.
Python3
def> modify_integer(x):> > x> => x> +> 10> > print> (> 'Inside function:'> , x)> > x> => 5> print> (> 'Before function call:'> , x)> modify_integer(x)> print> (> 'After function call:'> , x)> |
Produktion:
Before function call: 5 Inside function: 15 After function call: 5
Python-programmering bruger pass by reference-objektkoncept, mens værdier overføres til funktionerne. Denne artikel forsøger at vise dig begrebet pass by value og pass by reference i Python. Vi har vist forskellige tilfælde af beståelse af værdier med eksempler. At overføre værdier til en funktion i Python er anderledes end andre kodningssprog, men med denne vejledning kan du nemt forstå konceptet og implementere det i dit arbejde.
Læs også:
Er Python kald ved reference eller kald efter værdi