Python

Mimo mimo Reference vs. Vrednost v Pythonu

Mimo mimo Reference vs. Vrednost v Pythonu
Po poznavanju Pythona lahko najdete primere, ko funkcije ne spremenijo argumentov na mestu, kot bi predvidevali, še posebej, če poznate številne druge računalniške jezike. Številni jeziki uporabljajo argumente metode kot reference, ki so opredeljeni kot posredovanje referenc trenutnim spremenljivkam. Če ste napredni razvijalec Pythona, ki želi razumeti poseben način obravnavanja argumentov metode, potem je ta vodnik resnično za vas.

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.

SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...
Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...
0 A.D. Vadnica
Od številnih strateških iger tam 0 A.D. uspe izstopati kot izčrpen naslov in zelo globoka, taktična igra, čeprav je odprtokodna. Razvoj igre deluje ze...