„Python“

Pravažiuokite nuorodą vs. Vertė „Python“

Pravažiuokite nuorodą vs. Vertė „Python“
Pažinę „Python“, galite rasti atvejų, kai funkcijos nepakeičia argumentų toje vietoje, kaip jūs tikėjotės, ypač jei esate susipažinę su daugeliu kitų kompiuterio kalbų. Daugelis kalbų naudoja metodo argumentus kaip nuorodas, apibrėžiamas kaip perdavimas nuoroda į dabartinius kintamuosius. Jei esate pažengęs „Python“ kūrėjas ir norite suprasti konkretų „Python“ metodų argumentų apdorojimo būdą, šis vadovas jums tikrai tinka.

„Python“ palaiko „Pass by Object Reference“

„Pass-by-reference“ ir „pass-by-value“ yra neabejotinai du geriausiai atpažįstami ir lengvai suprantami parametrų perdavimo tarp programavimo kalbų būdai. Deja, „Python“ yra „pass-by-object-reference“, nei „Pass by Value“, nei „Pass by Reference“, dažnai vadinami „Call by Object Reference“ ir „Call by Sharing“.„Pravartu atidžiau pažvelgti į pačią koncepciją, suskaidant ją į segmentus, tuo pat metu pasinėrus į techninę„ Pass by Pass “specifikaciją:

Leidimas: tai reiškia metodo pateikimą su argumentu.

Pagal nuorodą: tai reiškia, kad argumentas, kurį perkeliate į metodą, nurodo kintamąjį, kuris dabar yra saugykloje, o ne skirtingą to kintamojo kopiją.

Kai metodui priskiriate nuorodą į apibrėžtą kintamąjį, kintamąjį, kurį jis atitinka, aiškiai paveiks visos šios nuorodos operacijos. Dabar apsvarstykime, kaip praktiškai tai veikia. Šiame pavyzdyje mes apibrėžėme kintamąjį "arg ' kurių vertė yra 4. Šiame scenarijuje kintamasis 'arg ' nebuvo pakeistas jo vietoje. Atrodo, kad „Python“ tvarko jūsų pateiktą argumentą, o ne nuorodą į esamą kintamąjį kaip į savarankišką vertę.

Ar tai reikštų, kad vietoj nuorodos „Python“ perkelia argumentus pagal vertę? „Python“ perkelia argumentus per priskyrimą, taigi nei pagal nuorodą, nei su verte. To logika yra dviguba:

Šiuo metu perduodamas parametras yra objekto rodyklė. Tam tikri duomenų tipai yra kintami, o kai kurie - ne.

Jei perkeliame kintamą objektą į funkciją, funkcija įgyja nuorodą į tą patį objektą, kad galėtumėte visa tai mutuoti savo sielai patenkinti; tačiau išorinė sritis nieko nežinotų, kol vėl prisijungsite prie nuorodos funkcijoje. Kai baigsite, išorinė nuoroda bus nukreipta tik į tikrąjį objektą. Jei perkelsite nekintamą objektą į funkciją, išorinė nuoroda visada negali būti vėl sujungta ir jūs negalėsite tiesiog mutuoti objekto. Kad viskas būtų daug paprasčiau, supraskime po vieną.

„Pass By Reference“

Visų pirma, jūs turite suprasti, kad pats kintamasis „mylist“ nėra sąrašas, bet nurodo sąrašą, turintį reikšmes. Kintamąjį „mylist“ galite vadinti konteineriu, kuriame yra vertės. Sąrašo vertės yra objektai. Kintamasis „mylist“ buvo tiesiogiai įtrauktas į funkciją su jos turiniu.

Panašu, kad abu „sąrašas“ ir „mano sąrašas“ yra tas pats saugyklos kintamasis žemiau esančiame kodo pavyzdyje ir todėl taikomi tam pačiam saugyklos objektu. Štai kodėl ant išvesties ji spausdina „Saeed“."

Bet koks su kintamuoju ar subjektu atliktas veiksmas bus nedelsiant atspindėtas skambinančiojo metodu. Šis metodas gali visiškai pakeisti kintamojo vertę ir nukreipti ją į visiškai skirtingą objektą. Kaip matote funkcijoje „set_list“, mes pakeitėme sąrašo turinį ir išspausdinome visiškai naują sąrašą su elementu „Aqsa“.„Taip yra todėl, kad mes grąžinome pakeistą sąrašą ir atspausdinome toje pačioje eilutėje kaip ir skambinantysis.

Metodas taip pat gali perskirstyti kintamojo elementus tam pačiam rezultatui, kaip nurodyta toliau. Matote, kad prie sąrašo pridėjome naują vertę, ir pakeitimas buvo atspindėtas. Prie sąrašo pridėjome unikalią eilutę ir grąžinome ją skambinančiajam. Apibendrinant galima pasakyti, kad metodas ir skambinantysis tą patį kintamąjį ir objektą naudojo per visą praeities santykį.

Praeikite pro vertę

Per „pass by value“ metodą pateikiamas argumento objekto, kurį skambintojas jam priskiria, kopija. Tai užtikrina, kad originalus elementas išliks nepakitęs, o visi atlikti pakeitimai išliks atskirose atminties vietose to paties objekto kopijoje.

Tai vienodai galioja visoms operacijoms, atliekamoms kintamuoju ar subjektu pagal metodą. Skambintojo metodo taikymo srities kintamųjų ir objektų kopijos yra visiškai atskirtos, kad juos apibendrintumėte.

Perduokite objektą pagal nuorodą

Šioje situacijoje, kadangi „Python“ skiriasi, „Python“ metodai saugykloje gauna labai panašią objekto nuorodą, į kurią kreipiasi skambinantysis. Ir atvirkščiai, technika negauna kintamojo „mylist“ („container“). Skambintojo metodas saugo tą patį objektą; metodas sugeneruoja savo talpyklą ir sukuria visiškai naują indeksą sau, kaip ir praeities vertei.

Skambintojas ir metodas kalba apie tą patį objektą saugykloje, bet kai pridėtas metodas pritaiko sąrašui išorinį elementą, skambinančiojo subjektas yra modifikuotas. Jie turi kelias etiketes, tačiau tai yra tie patys dalykai. Abu kintamieji turi labai panašų objektą. Tai prasmė, susijusi su jo judėjimu objektu. Saugykloje metodas ir skambinantysis naudoja panašų objektą, tačiau juos sugauna per kelis kintamuosius. Skambintojo kintamasis (konteineris) nebus pakeistas atlikus metodo kintamojo (konteinerio) pakeitimus; keičiami tik duomenys ar turinys.

Išvada

„Python“ veikia nepriklausomai nuo kalbų, kurios priima perkėlimą pagal nuorodą arba argumentų vertę. Metodo argumentai yra vietiniai kintamieji, kurie buvo priskirti kiekvienai metodo perkeltai vertei. Bet tai vis tiek netrukdo jums gauti tų pačių rezultatų, kuriuos galėtumėte rasti kitomis kalbomis, perkeldami argumentus pagal įgaliojimą.

„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...
„Unity3D“ pamoka
Įvadas į „Unity 3D“ „Unity 3D“ yra galingas žaidimų kūrimo variklis. Tai yra daugiašalė platforma, kuri leidžia kurti žaidimus mobiliesiems, interneti...