Piton

Pass by Reference vs. Érték Pythonban

Pass by Reference vs. Érték Pythonban
A Python ismerete után találhat olyan eseteket, amelyekben a függvények nem változtatják meg az argumentumokat egy helyszínen, ahogyan azt előre láthatnánk, különösen, ha sok más számítógépes nyelvet ismerünk. Számos nyelv metódus argumentumokat használ referenciaként, amelyeket az aktuális változókra való hivatkozásként ad át. Ha Ön egy fejlett Python fejlesztő, aki meg akarja érteni a Python módszeres argumentumok kezelésének sajátos módját, akkor ez az útmutató valóban az Ön számára.

A Python támogatja az objektum hivatkozás átadását

Az pass-by-reference és a pass-by-value kétségtelenül a programozási nyelvek közötti átadás paramétereinek két legismertebb és legkönnyebben érthető módja. A Python sajnos „pass-by-object-reference”, sem „Pass by Value”, sem „Pass by Reference”, gyakran „Call by Object Reference”, illetve „Call by Sharing”.„Hasznos alaposabban megvizsgálni magát a koncepciót azáltal, hogy részekre bontja, miközben elmélyül a referencia elhaladásának technikai sajátosságaiban:

Pass: ez azt jelenti, hogy egy metódust argumentummal látunk el.

Referencia alapján: ez azt jelenti, hogy az az argumentum, amelyre átkerül a metódusra, egy változóra utal, amely most a tárolóban található, a változó eltérő replikája helyett.

Amint a metódust referenciának rendeli egy meghatározott változóhoz, a változónak, amelyet megfelel, kifejezetten befolyásolni fogja a referencia összes művelete. Most vegyünk egy példát arra, hogy ez a gyakorlatban hogyan működik. Ebben a példában meghatároztunk egy változót 'arg ' amelynek értéke 4. Ebben a forgatókönyvben a 'változóarg ' nem módosult a helyén. Úgy tűnik, hogy a Python az Ön argumentumát kezeli, ahelyett, hogy a jelenlegi változóra önálló értékként hivatkozna.

Ez azt jelenti, hogy a Hivatkozás helyett a Python az argumentumokat érték szerint mozgatja? A Python az argumentumokat hozzárendeléssel mozgatja, tehát sem hivatkozással, sem értékkel. Ennek logikája kettős:

Jelenleg az átadó paraméter egy objektum mutatója. Bizonyos típusú adatok változtathatóak, és egyesek nem.

Ha egy módosítható objektumot egy funkcióba helyezünk, akkor a függvény hivatkozást kap ugyanarra az objektumra, így mindezt lélek megelégedésére mutathatja; a külső hatókör azonban semmit sem tudna, mielőtt újra csatlakozik a Referenciához a függvényben. Ha elkészült, a külső referencia csak a tényleges objektumra irányul. Ha egy megváltoztathatatlan objektumot áthelyez egy függvénybe, akkor a külső referenciát mindig nem lehet újraragasztani, és nem csak mutálhatja az objektumot. Ahhoz, hogy a dolgok sokkal egyszerűbbek legyenek, értsük meg egyenként.

Pass By Reference

Először is meg kell értened, hogy a 'mylist' változó maga nem lista, hanem egy értékkel rendelkező listára utal. A 'mylist' változót egy olyan tárolónak nevezhetjük, amelynek értékei vannak. A lista értékei objektumok. A 'mylist' változó egyenesen bekerült a függvénybe annak tartalmával.

Úgy tűnik, hogy a „lista” és a „saját listám” is ugyanaz a tárolóváltozó az alábbi kódpéldában, és így ugyanarra a tárolási objektumra vonatkoznak. Ezért a kimenetre nyomtatja a Saeed-et."

A változóval vagy entitással végzett bármilyen művelet azonnal tükröződik a hívó módszerrel. A módszer teljesen módosíthatja a változó értékét, és egy teljesen különálló objektumra irányíthatja. Amint a 'set_list' függvényben láthatja, megváltoztattuk a lista tartalmát, és egy teljesen új listát nyomtattunk az 'Aqsa' elemmel.- Ez azért van, mert a módosított listát visszaküldtük, és a hívóval ugyanazon a vonalon nyomtattuk ki.

A módszer a változó elemeit is átcsoportosíthatja ugyanarra az eredményre, mint az alábbiakban. Láthatja, hogy egy új értéket csatoltunk a listához, és a változás tükröződött. Egy egyedi karakterláncot csatoltunk egy listához, és visszaküldtük a hívónak. Összegzésképpen: a módszer és a hívó ugyanazt a változót és objektumot használta az áthaladás relációjában.

Pass by Value

A pass by value révén a metódus megkapja az argumentum objektum másolatát, amelyet a hívó hozzárendel. Ez biztosítja, hogy az eredeti elem változatlan maradjon, és az összes elvégzett módosítás megmaradjon külön memóriahelyeken ugyanazon objektum másolatában.

Egyformán érvényes a változóval vagy az entitással a módszerrel végrehajtott bármely műveletre. A hívó metódus hatókörében található változók és objektumok duplikátumai teljesen el vannak különítve összefoglalásuk céljából.

Objektum átadása hivatkozással

Ebben a helyzetben, mivel a Python megkülönböztethető, a Python módszerei megkapják a tárolóban nagyon hasonló objektum hivatkozást, amire a hívó hivatkozik. Ezzel szemben a technika nem kapja meg a 'mylist' (a tároló) változót. A hívó módszer ugyanazt az objektumot tárolja; a módszer generálja az ember konténerét, és egy teljesen friss indexet generál a sajátjához, csakúgy, mint a pass-by-value esetében.

A hívó és a metódus ugyanarról az objektumról beszél a tárolóban, de amikor a csatolt módszer külső elemet alkalmaz a listára, a hívó entitás módosul. Több címkéjük van, de ugyanazok a dolgok. Mindkét változó nagyon hasonló objektumot tartalmaz. Ez az az értelem, ami mögött áll a tárgy által történő mozgáshoz való viszony. A tárolóban a metódus és a hívó hasonló objektumot használ, mégis több változón keresztül elkapja őket. A hívó változót (a tárolót) a metódusváltozó (a tároló) semmilyen módosítása nem változtatja meg; csak az adatok vagy a tartalom módosul.

Következtetés

A Python függetlenül működik azoktól a nyelvektől, amelyek elfogadják az elmozdítást hivatkozás vagy argumentumérték alapján. A metódus argumentumok helyi változók, amelyeket a metódushoz átvitt minden értékhez hozzárendeltek. De ez még mindig nem zárja ki, hogy ugyanazokat az eredményeket érje el, mint más nyelveken, miközben argumentumokat proxy útján mozgat.

A legnépszerűbb Oculus App Lab játékok
Ha Oculus fülhallgató-tulajdonos, akkor tisztában kell lennie az oldalsó töltéssel. Az oldaltöltés a nem áruházi tartalom fejhallgatóra történő telepí...
A legjobb 10 játék az Ubuntuban
A Windows platform a játékok egyik domináns platformja volt, mivel a játékokat hatalmas százalékban fejlesztik ma a natív Windows támogatására. Kihívh...
5 legjobb arcade játék Linuxhoz
Manapság a számítógépek komoly gépek, amelyeket játékra használnak. Ha nem sikerül megszerezni az új magas pontszámot, akkor tudni fogja, mire gondolo...