Python

Ohita viite vs. Arvo Pythonissa

Ohita viite vs. Arvo Pythonissa
Kun olet tuntenut Pythonin, voit löytää tapauksia, joissa funktiot eivät muuta paikan argumentteja kuten ennakoit, varsinkin jos olet perehtynyt moniin muihin tietokonekieliin. Monet kielet käyttävät metodiargumentteja viitteinä, jotka määritellään viittauksiksi nykyisiin muuttujiin. Jos olet edistynyt Python-kehittäjä, joka haluaa ymmärtää Pythonin erityisen tavan käsitellä menetelmä argumentteja, tämä opas on todella sinulle.

Python tukee Pass by Object Reference -sovellusta

Pass-by-reference ja pass-by-value ovat kiistatta kaksi tunnetuinta ja helposti ymmärrettävää tapaa parametroida ohjelmointikielten välillä. Python on valitettavasti "pass-by-object-reference", ei "Pass by Value" eikä "Pass by Reference", usein nimitystä "Call by Object Reference" sekä "Call by Sharing"."On hyödyllistä tarkastella tarkemmin itse konseptia jakamalla se segmentteihin samalla kun syvennät viitteiden ohittamisen teknisiin yksityiskohtiin:

Kulkea: tämä tarkoittaa menetelmän toimittamista argumentilla.

Viittaamalla: tämä tarkoittaa sitä, että argumentti, jonka siirrät menetelmään, viittaa muuttujaan, joka nyt sijaitsee varastossa kyseisen muuttujan toisen kopion sijaan.

Kun määrität menetelmälle viitteen määriteltyyn muuttujaan, kaikki tämän viitteen toiminnot vaikuttavat nimenomaisesti muuttujaan, jota se vastaa. Tarkastellaan nyt esimerkkiä siitä, miten tämä käytännössä toimii. Tässä esimerkissä olemme määrittäneet muuttujan 'arg ' joiden arvo on 4. Koko skenaariossa muuttuja 'arg ' ei muutettu sen tilalle. Python näyttää näyttävän käsittelevän antamaasi argumenttia viittauksen sijasta nykyiseen muuttujaan itsenäisenä arvona.

Tarkoittaako tämä, että Python siirtää viitteiden sijasta argumentteja arvon mukaan? Python siirtää argumentit tehtävän kautta, joten ei viitteellä eikä arvolla. Tämän logiikka on kaksinkertainen:

Tällä hetkellä sisään menevä parametri on osoitin objektille. Tietyntyyppiset tiedot ovat muutettavissa, ja jotkut eivät ole muutettavissa.

Jos siirrämme muutettavan objektin funktioksi, funktio saa viitteen samaan esineeseen, jotta voit mutatoida kaiken sielusi tyydyttävällä tavalla; ulkoinen laajuus ei kuitenkaan tiedä mitään, ennen kuin liityt viitteeseen uudelleen toiminnossa. Kun olet valmis, ulkoinen viite kohdistuu vain varsinaiseen kohteeseen. Jos siirrät muuttumattoman objektin funktioon, ulkoista viitettä ei aina voida liittää uudelleen, etkä voi vain mutatoida objektia. Jotta asiat olisivat paljon yksinkertaisempia, ymmärretään yksitellen.

Ohita viite

Ensinnäkin sinun on ymmärrettävä, että muuttuja 'mylist' itsessään ei ole luettelo, vaan viittaa luetteloon, jolla on arvot. Voit kutsua muuttujaa "mylist" säilöksi, jolla on arvot. Luettelon arvot ovat objekteja. Muuttuja 'mylist' on toimitettu suoraan funktioon sen sisällön kanssa.

Molemmat “list” ja “my list” näyttävät olevan sama tallennusmuuttuja alla olevasta koodiesimerkistä ja soveltuvat siten samaan tallennusobjektiin. Siksi se tulostaa Saeed.'

Kaikki muuttujalle tai entiteettiin tehdyt toiminnot peilataan välittömästi soittajan menetelmään. Menetelmä voi täysin muuttaa muuttujan arvoa ja kohdistaa sen täysin erilliseen kohteeseen. Kuten funktiosta 'set_list' näet, olemme muuttaneet luettelon sisältöä ja tulostaneet kokonaan uuden luettelon, jossa on elementti 'Aqsa.'Tämä johtuu siitä, että olemme palauttaneet muokatun luettelon ja tulostaneet sen samalla rivillä kuin soittaja.

Menetelmä voi myös kohdistaa muuttujan elementit uudelleen samaan tulokseen kuin alla. Voit nähdä, että olemme lisänneet luetteloon uuden arvon, ja muutos on otettu huomioon. Olemme liittäneet luetteloon ainutlaatuisen merkkijonon ja palauttaneet sen soittajalle. Yhteenvetona voidaan todeta, että menetelmä ja soittaja ovat käyttäneet samaa muuttujaa ja objektia koko ohikulkusuhteen ajan.

Ohita arvo

Läpäisyn arvon kautta menetelmä toimitetaan kopio argumenttiobjektista, jonka soittaja sille antaa. Tämä varmistaa, että alkuperäinen kohde säilyy muuttumattomana ja kaikki tehdyt muutokset säilytetään erillisissä muistipaikoissa saman objektin kopiossa.

Se on yhtä pätevä kaikkien muuttujalle tai kokonaisuuteen menetelmän avulla suoritettujen toimintojen kanssa. Soittajan menetelmän piirissä olevien muuttujien ja objektien kopiot erotetaan kokonaan niiden yhteenvedon muodostamiseksi.

Ohita objekti viitteellä

Koska Python on erillinen, koko tässä tilanteessa Pythonin menetelmät saavat muistissa olevan samanlaisen objektiviitteen kuin soittaja viittaa. Toisaalta tekniikka ei saa muuttujaa 'mylist' (kontti). Soittajamenetelmä tallentaa saman objektin; menetelmä luo oman säiliön ja luo kokonaan uuden indeksin omalleen, aivan kuten ohitusarvossa.

Soittaja ja menetelmä puhuvat samasta objektista tallennustilassa, mutta kun liitetty menetelmä soveltaa ulkoista kohdetta luetteloon, soittajaentiteettiä muokataan. Heillä on useita tarroja, mutta ne ovat samat asiat. Molemmilla muuttujilla on hyvin samanlainen kohde. Se on takana sen suhde kohteen liikkumiseen. Varastossa menetelmä ja soittaja käyttävät samanlaista objektia, mutta saavat ne kiinni useiden muuttujien kautta. Soittajan muuttujaa (säilö) ei muuteta metodimuuttujaan (säilö) tehdyillä muutoksilla; vain tietoja tai sisältöä muokataan.

Johtopäätös

Python toimii itsenäisesti kielistä, jotka hyväksyvät siirron viitteellä tai argumenttien arvolla. Metodiargumentit ovat paikallisia muuttujia, jotka on allokoitu kullekin menetelmään siirretylle arvolle. Mutta se ei silti estä sinua saamasta samoja tuloksia kuin muillakin kielillä samalla kun siirrät argumentteja välityspalvelimen avulla.

Parhaat pelikonsoliemulaattorit Linuxille
Tässä artikkelissa luetellaan suositut pelikonsolin emulointiohjelmistot, jotka ovat saatavana Linuxille. Emulointi on ohjelmistojen yhteensopivuusker...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...
Kuinka siepata ja suoratoistaa pelisessiosi Linuxissa
Aikaisemmin pelaamista pidettiin vain harrastuksena, mutta ajan myötä pelialalla tapahtui valtava kasvu tekniikan ja pelaajien määrän suhteen. Peliala...