logo

Ohita viite vs arvo Pythonissa

Kehittäjät, jotka hyppäävät Python-ohjelmointiin muista kielistä, kuten C++:sta ja Javasta, ovat usein hämmentyneitä Pythonin argumenttien välitysprosessista. Oliokeskeinen tietomalli ja sen osoituskäsittely ovat syynä sekaannukseen perustasolla.

Artikkelissa keskustelemme käsitteestä kuinka välittää arvo viittauksella Pythonissa ja yritä ymmärtää ohimeneviä esimerkkejä Pythonissa.

Sisällysluettelo



Pass by Value ja Pass by Reference Pythonissa

Saatat haluta lyödä jotain luettuasi eteenpäin, joten varaudu. Pythonin argumenttien välitysmalli on ei Pass by Value tai Pass by Reference, mutta se on Pass by Object Reference.

Funktiossa välitettävän objektin tyypistä riippuen funktio käyttäytyy eri tavalla. Muuttumattomat objektit näyttävät ohituksen arvon, kun taas muuttuvat objektit näyttävät ohituksen viittauksen mukaan.

Voit tarkistaa ohimenemisarvon ja ohitusviittauksen välisen eron alla olevasta esimerkistä:

amplitudimodulaatio

Python 3




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

>

>

Lähtö

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

Yllä olevassa koodissa olemme osoittaneet, kuinka Python käyttää ohjelmassaan viittauskohteen käsitettä.

Välitämme kokonaisluvun funktiossa call_by_value(). Kokonaisluvut ovat muuttumattomia objekteja, joten Python toimii kutsun mukaan, eivätkä funktioon tehdyt muutokset heijastu funktion ulkopuolelle.

Sitten siirrämme luettelon funktiolle viittauksen perusteella. Toiminnossa call_by_reference() välitämme listan, joka on muuttuva objekti. Python toimii tässä funktiossa viittauskutsulla ja funktion sisällä tehdyt muutokset näkyvät myös funktion ulkopuolella.

Muuttuja ei ole objekti

Tässä a on muuttuja, joka osoittaa listaan, joka sisältää elementit X ja Y. Mutta itse a ei ole lista. Oletetaan, että a on ämpäri, joka sisältää objektin X ja Y.

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

Mikä on Pass by Reference Pythonissa?

Pass by reference tarkoittaa, että sinun on välitettävä funktio (viite) muuttujalle, mikä tarkoittaa, että muuttuja on jo olemassa muistissa.

Tässä muuttuja (ämpäri) välitetään suoraan funktioon. Muuttuja toimii pakettina, joka tulee sisältönsä (objektien) mukana.

kovakantinen vs pokkari

Yllä olevassa koodikuvassa sekä lista että oma_luettelo ovat sama säilömuuttuja ja viittaavat siksi samaan muistissa olevaan objektiin. Kaikki funktion muuttujalle tai objektille suorittamat toiminnot näkyvät suoraan funktion kutsujassa. Esimerkiksi funktio voi muuttaa muuttujan sisältöä kokonaan ja osoittaa sen täysin eri objektiin:

Lisäksi funktio voi määrittää muuttujan sisällön uudelleen samalla tavalla kuin alla:

Yhteenvetona voidaan todeta, että funktio ja kutsuja käyttävät samaa muuttujaa ja objektia.

Ohita viite Python-esimerkissä

Tässä esimerkissä funktio modify_list ottaa luettelon viitteellä. Funktio lisää merkkijonon Geeks funktion sisälle hyväksyttyyn luetteloon ja tulostaa sen. Koska listat ovat muuttuvia tietotyyppejä, funktion sisällä listaan ​​tehdyt muutokset näkyvät myös funktion ulkopuolella, kuten tulosteessa näkyy.

Python 3




def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)>

>

>

Lähtö

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

Mikä on Pass by Value Pythonissa?

Tässä lähestymistavassa välitämme kopion the funktion todelliset muuttujat parametrina. Näin ollen funktion sisällä tehtyjen parametrien muutokset eivät heijastu todelliseen muuttujaan.

Sama pätee kaikkiin toimintoihin, jotka funktio suorittaa muuttujalle tai objektille

Yhteenvetona voidaan todeta, että muuttujien ja objektien kopiot funktion kutsujan kontekstissa ovat täysin eristettyjä.

Ohita arvo Python-esimerkissä

Tässä välitämme kokonaisluvun x funktiolle, joka on muuttumaton tietotyyppi. Päivitämme sitten funktion sisällä olevan kokonaisluvun arvon ja tulostamme päivitetyn arvon. Muutokset eivät näy funktion ulkopuolella, koska kokonaisluvut ovat muuttumattomia tietotyyppejä.

Python 3




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

>

>

Lähtö:

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

Python-ohjelmointi käyttää pass by reference -objektikonseptia, kun se välittää arvoja funktioille. Tämä artikkeli yrittää näyttää sinulle arvon ohituksen ja viittauksen ohituksen käsitteen Pythonissa. Olemme näyttäneet eri tapauksia arvojen välittämisestä esimerkein. Arvojen välittäminen funktiolle Pythonissa eroaa muista koodauskielistä, mutta tämän opetusohjelman avulla voit helposti ymmärtää konseptin ja ottaa sen käyttöön työssäsi.

rekursio javassa

Lue myös:

Onko Python-kutsu viitteellä vai kutsu arvon mukaan