Python

Gå forbi referanse vs. Verdi i Python

Gå forbi referanse vs. Verdi i Python
Etter å ha kjent Python, kan du finne tilfeller der funksjonene ikke endrer argumentene på et sted som du forventer, spesielt hvis du er kjent med mange andre dataspråk. Mange språk bruker metodeargumenter som referanser, definert som overføring av referanse til aktuelle variabler. Hvis du er en avansert Python-utvikler som ønsker å forstå Pythons spesielle måte å behandle metodargumenter på, er denne guiden virkelig noe for deg.

Python støtter Pass by Object Reference

Pass-by-reference og pass-by-value er unektelig de to mest anerkjente og lett forståelige måtene å parametere passering mellom programmeringsspråk. Python er dessverre 'pass-by-object-reference', verken "Pass by Value" eller "Pass by Reference", ofte betegnet som "Call by Object Reference" samt "Call by Sharing".”Det er nyttig å se nærmere på selve konseptet ved å dele det opp i segmenter mens du stuper inn i de tekniske detaljene ved å gå forbi Referanse:

Sende: dette betyr å gi en metode et argument.

Med referanse: dette betyr at argumentet du flytter til metoden refererer til en variabel som nå ligger i lagring i stedet for en annen kopi av den variabelen.

Når du tilordner metoden en referanse til en definert variabel, vil variabelen den tilsvarer bli eksplisitt påvirket av alle operasjoner på denne referansen. La oss nå se på et eksempel på hvordan dette i praksis fungerer. I dette eksemplet har vi definert en variabel 'arg ' har en verdi på 4. Gjennom dette scenariet er variabelen 'arg ' ble ikke endret i stedet. Python ser ut til å håndtere argumentet du har gitt, i stedet for en referanse til en nåværende variabel som en selvstendig verdi.

Vil dette bety at i stedet for ved referanse, flytter Python argumenter etter verdi? Python flytter argumenter gjennom oppdrag, så verken etter referanse eller med verdi. Logikken for dette er dobbelt:

Foreløpig er parameteren som sendes inn en peker til et objekt. Visse typer data er mutable, og noen er ikke mutable.

Hvis vi flytter et foranderlig objekt til en funksjon, får funksjonen en referanse til det samme objektet slik at du kan mutere det hele til din sjels tilfredsstillelse; Imidlertid ville det eksterne omfanget ikke vite noe før du slutter deg til referansen i funksjonen. Når du er ferdig, vil den eksterne referansen bare sikte mot det faktiske objektet. Hvis du flytter et uforanderlig objekt til en funksjon, kan den eksterne referansen alltid ikke bindes på nytt, og du kan ikke bare mutere objektet. For å gjøre ting mye enklere, la oss forstå en etter en.

Gå forbi referanse

Først og fremst må du forstå at variabelen 'min liste' i seg selv ikke er en liste, men refererer til en liste med verdier. Du kan kalle variabelen 'min liste' for en container med verdier i den. Listeverdiene er objekter. Variabelen 'mylist' har blitt levert rett inn i funksjonen med innholdet.

Både "liste" og "min liste" ser ut til å være den samme lagringsvariabelen i kodeeksemplet nedenfor og gjelder dermed det samme lagringsobjektet. Det er derfor på utskrift, det skriver ut 'Saeed.'

Enhver handling som gjøres på variabelen eller enheten, blir umiddelbart speilet til anropsmetoden. Metoden kan helt endre verdien på variabelen og sikte den mot et helt distinkt objekt. Som du kan se i funksjonen 'set_list', har vi endret listeinnholdet og skrevet ut en helt ny liste med elementet 'Aqsa.'Dette er fordi vi har returnert den modifiserte listen og skrevet den ut på samme linje som innringeren.

Metoden kan også omfordele variabelens elementer for samme resultat som nedenfor. Du kan se at vi har lagt til en ny verdi i listen, og endringen har blitt reflektert. Vi har lagt til en unik streng i en liste og returnert den til den som ringer. For å konkludere har metoden og innringeren brukt den samme variabelen og objektet gjennom forbipasseringsrelasjonen.

Gå forbi verdi

Gjennom forbipasseringsverdi leveres metoden med et duplikat av argumentobjektet som den som ringer tildeler den. Dette sikrer at den opprinnelige varen forblir uendret og at alle endringer som er gjort beholdes på separate minneplasser i en kopi av det samme objektet.

Det er like gyldig med alle operasjoner utført på en variabel eller enheten etter metoden. Duplikater av variabler og objekter i anropsmetodens omfang er helt atskilt for å oppsummere dem.

Pass objekt ved referanse

Gjennom denne situasjonen, siden Python er distinkt, får Pythons metoder den samme objektreferansen i lagringen som den som ringer til. Omvendt får teknikken ikke variabelen 'mylist' (beholderen). Innringermetoden lagrer det samme objektet; metoden genererer en container og genererer en helt fersk indeks for seg selv, akkurat som i forbipasseringsverdi.

Innringeren og metoden snakker om det samme objektet i lagringen, men når den vedlagte metoden bruker et eksternt element til en liste, blir den som ringer endret. De har flere etiketter, men de er de samme tingene. Begge variablene har et veldig likt objekt. Det er følelsen på baksiden av forholdet til å bevege seg ved objektet. I lagringen bruker metoden og innringeren et lignende objekt, men fanger dem gjennom flere variabler. Innringervariabelen (beholderen) vil ikke bli endret av noen modifikasjoner gjort i metodevariabelen (beholderen); bare dataene eller innholdet er endret.

Konklusjon

Python opererer uavhengig av språk som godtar flytting etter referanse eller verdi av argumenter. Metodeargumenter er lokale variabler som er allokert til hver verdi overført til metoden. Men det utelukker fortsatt ikke at du får de samme resultatene som du ville funnet på andre språk mens du flyttet argumenter ved fullmakt.

Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...