Python

Prejdite okolo referencie vs. Hodnota v Pythone

Prejdite okolo referencie vs. Hodnota v Pythone
Po znalosti jazyka Python môžete nájsť prípady, keď funkcie nezmenia argumenty na mieste, ako by ste predpokladali, najmä ak ovládate mnoho ďalších počítačových jazykov. Mnoho jazykov používa argumenty metód ako odkazy, ktoré sú definované ako postupovanie odkazom na súčasné premenné. Ak ste pokročilý vývojár Pythonu, ktorý chce pochopiť konkrétny spôsob spracovania argumentov metódy v Pythone, potom je táto príručka skutočne pre vás.

Python podporuje prechod okolo objektu

Pass-by-reference a pass-by-value sú nepopierateľne dva najuznávanejšie a ľahko pochopiteľné spôsoby prechodu parametrov medzi programovacími jazykmi. Python nie je, bohužiaľ, „odkazom okolo objektu“, ani „Pass by Value“, ani „Pass by Reference“, často označovaný ako „Call by Object Reference“, ako aj „Call by Sharing“.„Je užitočné bližšie sa pozrieť na samotný koncept tak, že ho rozdelíte na segmenty a ponoríte sa do technických špecifík prechádzania referenciou:

Prihrávka: to znamená dodať metóde argument.

Podľa referencie: To znamená, že argument, ktorý prejdete k metóde, odkazuje na premennú, ktorá sa teraz nachádza v úložisku, a nie na inú repliku tejto premennej.

Keď priradíte metóde odkaz na definovanú premennú, premenná, ktorej zodpovedá, by bola explicitne ovplyvnená všetkými operáciami v tejto referencii. Pozrime sa teraz na príklad toho, ako to v praxi funguje. V tomto príklade sme definovali premennú 'arg s hodnotou 4. V celom tomto scenári sa premenná „arg nebol upravený na svojom mieste. Zdá sa, že Python spracováva váš poskytnutý argument namiesto odkazu na súčasnú premennú ako samostatnú hodnotu.

Znamenalo by to, že namiesto referencie Python posúva argumenty podľa hodnoty? Python posúva argumenty cez priradenie, teda ani pomocou referencie, ani s hodnotou. Logika toho je dvojaká:

V súčasnosti je odovzdávajúci parameter ukazovateľ na objekt. Určité typy údajov sú zmeniteľné a niektoré nie sú zmeniteľné.

Ak presunieme premenlivý objekt do funkcie, funkcia získa odkaz na ten istý objekt, aby ste ho mohli všetko zmutovať k spokojnosti svojej duše; externý rozsah by však nevedel nič, skôr ako sa znova pripojíte k odkazu vo funkcii. Po dokončení bude externá referencia zameraná iba na skutočný objekt. Ak presuniete nemenný objekt do funkcie, externý odkaz sa nedá vždy znova spojiť a nemôžete objekt iba mutovať. Aby boli veci oveľa jasnejšie, rozumejme jeden po druhom.

Prejdite okolo referencie

Najskôr musíte pochopiť, že premenná 'mylist' sama o sebe nie je zoznam, ale odkazuje na zoznam s hodnotami. Premennú 'mylist' môžete nazvať kontajnerom, ktorý obsahuje hodnoty. Hodnoty zoznamu sú objekty. Premenná „mylist“ bola priamo doručená do funkcie s jej obsahom.

„Zoznam“ aj „môj zoznam“ sa v príklade kódu zdajú byť rovnakou premennou úložiska, a tak sa vzťahujú na ten istý objekt úložiska. Preto sa na výstupe vytlačí text „Saeed“.„

Akákoľvek akcia vykonaná s premennou alebo entitou by sa okamžite zrkadlila s metódou volajúceho. Metóda môže úplne zmeniť hodnotu premennej a zamerať ju na úplne odlišný objekt. Ako vidíte vo funkcii „set_list“, zmenili sme obsah zoznamu a vytlačili úplne nový zoznam s prvkom „Aqsa“.„Je to preto, že sme vrátili upravený zoznam a vytlačili ho na rovnakom riadku ako volajúci.

Metóda môže tiež prerozdeliť prvky premennej pre rovnaký výsledok, ako je uvedené nižšie. Vidíte, že sme do zoznamu pridali novú hodnotu a zmena sa prejavila. Do zoznamu sme pripojili jedinečný reťazec a vrátili ho volajúcemu. Na záver možno povedať, že metóda a volajúci používali v rámci vzťahu pass-by rovnakú premennú a objekt.

Prejdite okolo hodnoty

Prostredníctvom hodnoty pass by je metóda dodávaná s duplikátom objektu argumentu, ktorý mu volajúci priradí. To zaisťuje, že pôvodná položka zostane nezmenená a všetky vykonané úpravy sa zachovajú na samostatných pamäťových miestach v replike rovnakého objektu.

Je rovnako platný pre všetky operácie vykonávané metódou s premennou alebo entitou. Duplikáty premenných a objektov v rozsahu metódy volajúceho sú na ich zhrnutie úplne oddelené.

Prejdite objekt referenciou

Počas celej tejto situácie, pretože Python je odlišný, získavajú Pythonove metódy v úložisku veľmi podobný odkaz na objekt, na aký sa odvoláva volajúci. Naopak, táto technika nezíska premennú „mylist“ (kontajner). Metóda volajúceho ukladá rovnaký objekt; metóda generuje vlastný kontajner a generuje úplne nový vlastný index, rovnako ako v hodnote pass-by-value.

Volajúci a metóda hovoria o rovnakom objekte v úložisku, ale keď pripojená metóda použije na zoznam externú položku, entita volajúceho sa upraví. Majú viac štítkov, ale sú to rovnaké veci. Obe premenné majú veľmi podobný objekt. To je zmysel, ktorý má jeho vzťah k pohybu objektom. V úložisku používa metóda a volajúci podobný objekt, ale zachytáva ich prostredníctvom viacerých premenných. Premenná volajúceho (kontajner) sa nezmení žiadnymi úpravami vykonanými v premennej metódy (kontajner); upravujú sa iba údaje alebo obsah.

Záver

Python funguje nezávisle od jazykov, ktoré akceptujú presun pomocou odkazu alebo hodnoty argumentov. Argumenty metódy sú lokálne premenné, ktoré boli pridelené každej hodnote prenesenej do metódy. To vám ale stále nevylučuje získanie rovnakých výsledkov, aké by ste našli v iných jazykoch, pri presúvaní argumentov prostredníctvom servera proxy.

Top 5 ergonomických produktov pre počítačové myši pre Linux
Spôsobuje dlhodobé používanie počítača bolesť zápästia alebo prstov? Trpíte stuhnutými kĺbmi a neustále si musíte podávať ruky? Cítite pálivú bolesť z...
Ako zmeniť nastavenie myši a touchpadu pomocou systému Xinput v systéme Linux
Väčšina distribúcií systému Linux sa štandardne dodáva s knižnicou „libinput“ na spracovanie vstupných udalostí v systéme. Dokáže spracovať vstupné ud...
S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...