logo

V Pythone prejsť odkazom vs hodnotou

Vývojári, ktorí skočia do programovania v Pythone z iných jazykov, ako sú C++ a Java, sú často zmätení procesom odovzdávania argumentov v Pythone. Objektovo-centrický dátový model a jeho spracovanie priradenia sú príčinou zmätku na základnej úrovni.

V článku budeme diskutovať o koncepte ako odovzdať hodnotu odkazom v Pythone a pokúste sa pochopiť príklady odkazov v Pythone.

Obsah



Pass by Value a Pass by Reference v Pythone

Po prečítaní dopredu možno budete chcieť niečo udrieť, tak sa pripravte. Pythonov model odovzdávania argumentov je ani Pass by Value, ani Pass by Reference, ale je to Pass by Object Reference.

V závislosti od typu objektu, ktorý vo funkcii zadáte, sa funkcia správa odlišne. Nemenné objekty zobrazujú prechod podľa hodnoty, zatiaľ čo meniteľné objekty zobrazujú prechod odkazom.

Rozdiel medzi odovzdanou hodnotou a odovzdanou referenciou môžete skontrolovať v príklade nižšie:

Python3


obrázok markdown



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)>

>

>

Výkon

  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']>

Vo vyššie uvedenom kóde sme ukázali, ako Python vo svojom programe používa koncept volania podľa referenčného objektu.

Vo funkcii call_by_value() odovzdáme celé číslo. Celé čísla sú nemenné objekty, preto Python funguje podľa volania podľa hodnoty a zmeny vykonané vo funkcii sa neodrážajú mimo funkcie.

Potom postúpime zoznam funkcii odkazom. Vo funkcii call_by_reference() odovzdávame zoznam, ktorý je meniteľným objektom. Python funguje podľa volania odkazom v tejto funkcii a zmeny vykonané vo vnútri funkcie je možné vidieť aj mimo funkcie.

Premenná nie je objekt

Tu a je premenná, ktorá ukazuje na zoznam obsahujúci prvky X a Y. Ale a samotné nie je zoznam. Považujte a za vedro, ktoré obsahuje objekt X a Y.

 a = ['X', 'Y']>

obsahuje python

Čo je Pass by Reference v Pythone?

Pass by reference znamená, že funkciu (odkaz) musíte odovzdať premennej, čo znamená, že premenná už existuje v pamäti.

Tu sa premenná (segment) prenáša priamo do funkcie. Premenná funguje ako balík, ktorý prichádza s jej obsahom (objektmi).

Vo vyššie uvedenom obrázku kódu sú zoznam a môj_zoznam rovnaká premenná kontajnera, a preto odkazujú na rovnaký objekt v pamäti. Akákoľvek operácia vykonaná funkciou na premennej alebo objekte sa priamo prejaví vo volaní funkcie. Funkcia môže napríklad úplne zmeniť obsah premennej a nasmerovať ju na úplne iný objekt:

mapa iterácie java

Funkcia môže tiež priradiť obsah premennej s rovnakým účinkom, ako je uvedené nižšie:

Aby sme to zhrnuli, v pass-by-reference funkcia a volajúci používajú rovnakú premennú a objekt.

Prejdite odkazom v príklade Python

V tomto príklade funkcia modifikovať_zoznam používa zoznam odkazom. Funkcia pridá reťazec Geeks do odovzdaného zoznamu vnútri funkcie a vytlačí ho. Keďže zoznamy sú meniteľné dátové typy, zmeny vykonané v zozname vo funkcii sa prejavia aj mimo funkcie, ako môžete vidieť vo výstupe.

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)>

>

>

Výkon

  Inside function: ['Geeks', 'for', 'Geeks']    Outside function: ['Geeks', 'for', 'Geeks']>

Čo je Pass by Value v Pythone?

V tomto prístupe odovzdávame kópiu a aktuálne premenné vo funkcii ako parameter. Preto sa akákoľvek úprava parametrov vo funkcii neprejaví v skutočnej premennej.

To isté platí pre akúkoľvek operáciu vykonanú funkciou na premennej alebo objekte

Aby sme to zhrnuli, kópie premenných a objektov v kontexte volajúceho funkcie sú úplne izolované.

logika prvého poriadku

Pass by Value in Python Príklad

Tu odovzdáme celé číslo x funkcii, ktorá je nemenným dátovým typom. Potom aktualizujeme hodnotu celého čísla vo funkcii a vytlačíme aktualizovanú hodnotu. Zmeny nie sú viditeľné mimo funkcie, pretože celé čísla sú nemenné dátové typy.

Python3

reťazec v porovnaní s javou




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)>

>

>

Výkon:

  Before function call: 5    Inside function: 15    After function call: 5>

Programovanie v Pythone využíva koncepciu prechodu referenčným objektom pri odovzdávaní hodnôt funkciám. Tento článok sa vám snaží ukázať koncept odovzdávania hodnoty a odovzdávania odkazom v Pythone. Na príkladoch sme ukázali rôzne prípady odovzdávania hodnôt. Odovzdávanie hodnôt funkcii v Pythone sa líši od iných kódovacích jazykov, ale s týmto tutoriálom môžete tento koncept ľahko pochopiť a implementovať ho do svojej práce.

Prečítajte si tiež:

Je Python volanie odkazom alebo volanie hodnotou