Python

Mööduge võrdlusest vs. Väärtus Pythonis

Mööduge võrdlusest vs. Väärtus Pythonis
Pärast Pythoni tundmist leiate juhtumeid, kus funktsioonid ei muuda kohapeal olevaid argumente, nagu arvata oskaksite, eriti kui olete tuttav paljude teiste arvutikeeltega. Paljud keeled kasutavad meetodi argumente viidetena, mis on määratletud viitena praegustele muutujatele. Kui olete arenenud Pythoni arendaja ja soovite mõista Pythoni konkreetset viisi meetodi argumentide käsitlemiseks, siis see juhend on tõesti teie jaoks.

Python toetab Pass by Object Reference

Pass-by-reference ja pass-by-value on vaieldamatult kaks kõige paremini tunnustatud ja hõlpsasti mõistetavat viisi programmeerimiskeelte vahelise parameetri edastamiseks. Python on kahjuks „pass-by-object-reference”, ei „Pass by Value” ega „Pass by Reference”, mida sageli nimetatakse nii „Call by Object Reference“ kui ka „Call by Sharing."Kasulik on vaadata lähemalt kontseptsiooni ennast, jagades selle segmentideks, samal ajal kui uurite viitest möödumise tehnilisi üksikasju:

Üle andma: see tähendab meetodi varustamist argumendiga.

Viite järgi: see tähendab, et meetodile üle viidud argument viitab muutujale, mis asub nüüd selle muutuja erineva koopia asemel salvestusruumis.

Kui määrate meetodile viite määratletud muutujale, mõjutavad muutujaid, millele see vastab, selgesõnaliselt kõik selle viite toimingud. Vaatleme nüüd näidet selle kohta, kuidas see praktikas toimib. Selles näites oleme määranud muutuja 'arg ' mille väärtus on 4. Selle stsenaariumi vältel muutuja 'arg ' ei olnud selle asemel muudetud. Tundub, et Python käitleb teie esitatud argumenti selle asemel, et viidata olevale muutujale kui iseseisvale väärtusele.

Kas see tähendaks, et viite asemel liigutab Python argumente väärtuse järgi? Python liigutab argumente omistamise kaudu, seega ei viite ega väärtusega. Selle loogika on kahekordne:

Praegu on sissetulev parameeter objekti osuti. Teatud tüüpi andmed on muudetavad ja mõned pole muudetavad.

Kui liigutame muudetava objekti funktsiooniks, omandab funktsioon viite samale objektile, et saaksite seda kõike oma hinge rahuldavalt muteerida; väline funktsioon ei tea aga enne funktsiooni Viide uuesti liitumist. Kui olete lõpetanud, on väline viide suunatud ainult tegelikule objektile. Kui teisaldate muutumatu objekti funktsiooni juurde, ei saa välist viidet alati uuesti siduda ja te ei saa objekti lihtsalt muteerida. Et asi oleks palju sirgjoonelisem, mõistkem ükshaaval.

Pass By Reference

Kõigepealt peate mõistma, et muutuja 'mylist' ise ei ole loend, vaid viitab väärtustega loendile. Muutujale „mylist” saate helistada konteineriks, mille väärtused on sees. Loendi väärtused on objektid. Muutuja 'mylist' on sisuga otse funktsiooni sisestatud.

Mõlemad loend ja minu loend näivad olevat sama salvestusmuutuja allolevas koodinäites ja kehtivad seega sama mäluobjekti kohta. Sellepärast trükib see väljundil Saeedi."

Kõik muutujaga või üksusega tehtud toimingud kajastuksid kohe helistaja meetodil. Meetod võib muutuja väärtust täielikult muuta ja suunata selle täiesti eristatavale objektile. Nagu funktsioonist 'set_list' näete, oleme loendi sisu muutnud ja printinud täiesti uue loendi, millel on element 'Aqsa.Selle põhjuseks on see, et oleme muudetud loendi tagastanud ja selle helistajaga samal real printinud.

Meetod võib muutuja elemendid ümber jaotada sama tulemuse saamiseks nagu allpool. Näete, et oleme lisanud loendisse uue väärtuse ja muudatus on kajastatud. Oleme lisanud unikaalse stringi loendisse ja tagastanud selle helistajale. Kokkuvõtteks võib öelda, et meetod ja helistaja on kogu möödamissuhte jooksul kasutanud sama muutujat ja objekti.

Väärtusest möödumine

Läbipääsu kaudu antakse meetodile koos argumenti objekti duplikaadiga, mille helistaja talle omistab. See tagab, et algne üksus jääb muutumatuks ja kõik tehtud muudatused jäävad sama objekti koopiasse eraldi mälupaikadesse.

See kehtib võrdselt kõigi muutujaga või üksusega meetodi järgi tehtud toimingutega. Helistaja meetodi reguleerimisala muutujate ja objektide duplikaadid on nende kokkuvõtmiseks täielikult eraldatud.

Esitage objekt viitega

Kuna Python on eraldiseisev, saavad kogu olukorras Pythoni meetodid salvestusruumis väga sarnase objektiviite, millele helistaja viitab. Ja vastupidi, tehnika ei saa muutujat „mylist” (konteiner). Helistaja meetod salvestab sama objekti; meetod genereerib oma konteineri ja genereerib enda jaoks täiesti värske indeksi, nagu ka möödaminnes.

Helistaja ja meetod räägivad salvestises samast objektist, kuid kui lisatud meetod rakendab loendis välist üksust, muudetakse helistaja olemit. Neil on mitu silti, kuid need on samad asjad. Mõlemad muutujad omavad väga sarnast objekti. See on selle taga peituv mõte objekti liikumisega. Salvestusruumis kasutavad meetod ja helistaja sarnast objekti, püüdes neid siiski mitme muutuja abil. Helistaja muutujat (konteiner) ei muudeta meetodi muutuja (konteiner) tehtud muudatustega; muudetakse ainult andmeid või sisu.

Järeldus

Python töötab sõltumatult keeltest, mis aktsepteerivad teisaldamist viite või argumentide väärtuse järgi. Meetodi argumendid on lokaalsed muutujad, mis on omistatud igale meetodile üle kantud väärtusele. Kuid see ei välista ikkagi samade tulemuste saamist, mille leiate teistest keeltest, kui teisaldate argumente puhverserveri abil.

Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...
Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...
Parimad Linuxi käsurea mängud
Käsurida pole Linuxi kasutamisel lihtsalt teie suurim liitlane - see võib olla ka meelelahutusallikas, sest saate seda kasutada paljude lõbusate mängu...