Python podpira referenco Pass by Object
Prenos referenc in posredovana vrednost sta nedvomno dva najbolj prepoznavna in lahko razumljiva načina za parametriranje prenosa med programskimi jeziki. Python je na žalost "referenca mimo predmeta", niti "Pass by Value" niti "Pass by Reference", ki se pogosto imenuje "Call by Object Reference" in "Call by Sharing".”Koristno je natančneje pogledati sam koncept, tako da ga razdelimo na segmente, medtem ko se potopimo v tehnične posebnosti podajanja mimo reference:
Pass: to pomeni, da metodi ponudite argument.
Po sklicu: to pomeni, da se argument, ki ga premaknete na metodo, nanaša na spremenljivko, ki je zdaj shranjena namesto na drugo repliko te spremenljivke.
Ko metodi dodelite referenco definirani spremenljivki, bi na operacijo, ki ji ustreza, izrecno vplivale vse operacije na tej referenci. Zdaj pa si oglejmo primer, kako to v praksi deluje. V tem primeru smo definirali spremenljivko 'prepir ki imajo vrednost 4. V tem scenariju spremenljivka 'prepir ni bil spremenjen na svojem mestu. Zdi se, da Python obdeluje navedeni argument namesto sklica na sedanjo spremenljivko kot samostojno vrednost.
Ali bi to pomenilo, da Python namesto z referenco premika argumente po vrednosti? Python premika argumente z dodelitvijo, torej ne z referenco ne z vrednostjo. Logika tega je dvojna:
Trenutno je parameter, ki se posreduje, kazalec na objekt. Nekatere vrste podatkov je mogoče spremeniti, nekatere pa jih ni mogoče spremeniti.
Če spremenljiv predmet premaknemo v funkcijo, funkcija pridobi referenco na isti predmet, tako da lahko vse to spremenite v zadovoljstvo svoje duše; vendar zunanji obseg ne bi vedel ničesar, preden se ponovno vključite v sklic v funkciji. Ko končate, bo zunanja referenca usmerjena samo na dejanski objekt. Če v funkcijo premaknete nespremenljivi predmet, zunanjega sklica vedno ni mogoče znova povezati in predmeta ne morete samo mutirati. Da bodo stvari bolj enostavne, se razumemo eno za drugo.
Prenesite referenco
Najprej morate razumeti, da spremenljivka 'mylist' sama ni seznam, temveč se nanaša na seznam z vrednostmi. Spremenljivko "mylist" lahko pokličete v vsebnik, v katerem so vrednosti. Vrednosti seznama so predmeti. Spremenljivka 'mylist' je bila neposredno vključena v funkcijo s svojo vsebino.
Zdi se, da sta »seznam« in »moj seznam« enaka spremenljivka za shranjevanje v spodnjem primeru kode in se zato nanašata na isti objekt shranjevanja. Zato na izhodu natisne 'Saeed."
Vsako dejanje, ki se izvede nad spremenljivko ali entiteto, bi se takoj zrcalilo v metodi klicatelja. Metoda lahko v celoti spremeni vrednost spremenljivke in jo usmeri na popolnoma ločen predmet. Kot lahko vidite v funkciji 'set_list', smo spremenili vsebino seznama in natisnili povsem nov seznam z elementom 'Aqsa.'To je zato, ker smo spremenili seznam in ga natisnili v isti vrstici kot klicatelj.
Metoda lahko tudi prerazporedi elemente spremenljivke za enak rezultat kot spodaj. Vidite, da smo na seznam dodali novo vrednost in sprememba se je odrazila. Seznamu smo dodali unikatni niz in ga vrnili klicatelju. Da zaključimo, metoda in klicatelj uporabljata isto spremenljivko in predmet v celotnem razmerju prenosa.
Prenesite vrednost
Skozi vrednost posredujejo metodi dvojnik predmeta argumenta, ki mu ga dodeli klicatelj. To zagotavlja, da izvirni izdelek ostane nespremenjen in da se vse izvedene spremembe hranijo na ločenih pomnilniških lokacijah v kopiji istega predmeta.
Velja enako za vse operacije, ki jih metoda izvede s spremenljivko ali entiteto. Dvojniki spremenljivk in objektov v obsegu metode klicatelja so v celoti ločeni, da jih povzamemo.
Predaj predmet po referenci
Ker je Python v tej situaciji različen, metode Pythona pridobijo zelo podoben sklic na objekt v pomnilniku, na katerega se sklicuje klicatelj. Nasprotno pa tehnika ne dobi spremenljivke 'mylist' (vsebnik). Metoda klicatelja shrani isti predmet; metoda ustvari lastni vsebnik in ustvari povsem nov indeks zase, tako kot pri posredni vrednosti.
Klicatelj in metoda govorita o istem predmetu v pomnilniku, toda ko dodana metoda uporabi zunanji element na seznamu, se entiteta klicatelja spremeni. Imajo več oznak, vendar gre za iste stvari. Obe spremenljivki imata zelo podoben objekt. To je smisel v ozadju njegovega odnosa do premikanja predmeta. V pomnilniku metoda in klicatelj uporabljata podoben objekt, vendar ju ujameta skozi več spremenljivk. Spremenljivka klicatelja (vsebnik) ne bo spremenjena z nobenimi spremembami spremenljivke metode (vsebnik); spremenijo se samo podatki ali vsebina.
Zaključek
Python deluje neodvisno od jezikov, ki sprejemajo premikanje po sklicu ali vrednosti argumentov. Argumenti metode so lokalne spremenljivke, ki so bile dodeljene vsaki vrednosti, preneseni v metodo. Toda to vam še vedno ne preprečuje, da bi dosegli enake rezultate, kot bi jih našli v drugih jezikih, medtem ko argumente premikate po pooblaščencu.