Razvijalci, ki skočijo v programiranje Python iz drugih jezikov, kot sta C++ in Java, so pogosto zmedeni zaradi postopka podajanja argumentov v Pythonu. Objektno osredotočeni podatkovni model in njegova obravnava dodelitve sta vzroka za zmedo na temeljni ravni.
V članku bomo razpravljali o konceptu kako posredovati vrednost s sklicevanjem v Python in poskusite razumeti primere prehoda mimo sklicevanja v Pythonu.
Kazalo
markdown slike
- Predaj po vrednosti in Predaj po sklicu v Pythonu
- Spremenljivka ni predmet
- Kaj je Pass by Reference v Pythonu?
- Kaj je Pass by Value v Pythonu?
Predaj po vrednosti in Predaj po sklicu v Pythonu
Morda boste želeli nekaj udariti po branju naprej, zato se pripravite. Pythonov model posredovanja argumentov je niti Pass by Value niti Pass by Reference, ampak je Pass by Object Reference.
Odvisno od vrste predmeta, ki ga posredujete v funkciji, se funkcija obnaša drugače. Nespremenljivi predmeti prikazujejo prehod po vrednosti, spremenljivi objekti pa prenos po sklicu.
Razliko med prenosom po vrednosti in prenosom po sklicu lahko preverite v spodnjem primeru:
Python3
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)> |
>
>
Izhod
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']>
V zgornji kodi smo pokazali, kako Python v svojem programu uporablja koncept klica po referenčnem objektu.
V funkciji call_by_value() posredujemo celo število. Cela števila so nespremenljivi objekti, zato Python deluje v skladu s klicem po vrednosti in spremembe v funkciji se ne odražajo zunaj funkcije.
Nato seznam posredujemo funkciji s sklicevanjem. V funkciji call_by_reference() posredujemo seznam, ki je spremenljiv objekt. Python deluje v skladu s klicem po sklicevanju v tej funkciji in spremembe, narejene znotraj funkcije, so vidne tudi zunaj funkcije.
Spremenljivka ni predmet
Tu je a spremenljivka, ki kaže na seznam, ki vsebuje elementa X in Y. Vendar a sam po sebi ni seznam. Za a velja, da je vedro, ki vsebuje objekta X in Y.
a = ['X', 'Y']>

Kaj je Pass by Reference v Pythonu?
Prenos po sklicu pomeni, da morate funkcijo (referenco) prenesti na spremenljivko, kar pomeni, da spremenljivka že obstaja v pomnilniku.
Tukaj se spremenljivka (vedro) posreduje neposredno v funkcijo. Spremenljivka deluje kot paket, ki prihaja s svojo vsebino (predmeti).

Na zgornji sliki kode sta seznam in moj_list ista spremenljivka vsebnika in se zato nanašata na isti objekt v pomnilniku. Vsako operacijo, ki jo izvede funkcija na spremenljivki ali objektu, bo neposredno odražal klicatelj funkcije. Funkcija bi lahko na primer popolnoma spremenila vsebino spremenljivke in jo usmerila na povsem drug objekt:

Poleg tega lahko funkcija znova dodeli vsebino spremenljivke z enakim učinkom kot spodaj:

Če povzamemo, pri prenosu po sklicu funkcija in klicatelj uporabljata isto spremenljivko in objekt.
Primer prenosa sklicevanja v Python
V tem primeru funkcija modify_list vzame seznam po sklicu. Funkcija doda niz Geeks na posredovani seznam znotraj funkcije in ga natisne. Ker so seznami spremenljivi tipi podatkov, se spremembe seznama znotraj funkcije odražajo tudi zunaj funkcije, kot lahko vidite v izhodu.
1 do 100 rimska št
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)> |
>
>
Izhod
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Kaj je Pass by Value v Pythonu?
Pri tem pristopu posredujemo kopijo the dejanske spremenljivke v funkciji kot parameter. Zato se kakršne koli spremembe parametrov znotraj funkcije ne bodo odražale v dejanski spremenljivki.

Enako velja za vsako operacijo, ki jo izvede funkcija na spremenljivki ali objektu
primeri operacijskega sistema

Če povzamemo, so kopije spremenljivk in objektov v kontekstu klicatelja funkcije popolnoma izolirane.
Primer prehoda vrednosti v Pythonu
Tukaj bomo posredovali celo število x funkciji, ki je nespremenljiv podatkovni tip. Nato posodobimo vrednost celega števila znotraj funkcije in natisnemo posodobljeno vrednost. Spremembe niso vidne zunaj funkcije, saj so cela števila nespremenljivi tipi podatkov.
Python3
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)> |
>
>
Izhod:
Before function call: 5 Inside function: 15 After function call: 5>
Programiranje Python uporablja koncept prehoda referenčnega objekta, medtem ko vrednosti posreduje funkcijam. Ta članek vam poskuša pokazati koncept prenosa po vrednosti in prenosa po sklicu v Pythonu. S primeri smo prikazali različne primere podajanja vrednosti. Posredovanje vrednosti funkciji v Pythonu se razlikuje od drugih kodirnih jezikov, vendar s to vadnico lahko enostavno razumete koncept in ga implementirate v svoje delo.
Preberite tudi:
Je klic Python po sklicu ali klic po vrednosti