logo

Praeiti pagal nuorodą ir reikšmę Python

Kūrėjai, peršokantys į Python programavimą iš kitų kalbų, pvz., C++ ir Java, dažnai yra supainioti dėl argumentų perdavimo Python. Į objektą orientuotas duomenų modelis ir jo priskyrimo traktavimas yra painiavos pagrindiniame lygmenyje priežastys.

Straipsnyje aptarsime sąvoką kaip perduoti reikšmę pagal nuorodą Python ir pabandykite suprasti praeinančius pavyzdžius Python.

Turinys



„Python“ programoje „Praeik pagal vertę“ ir „Pass by reference“.

Galbūt norėsite ką nors įmušti perskaitę į priekį, todėl pasiruoškite. Python argumentų perdavimo modelis yra nei Pass by Value, nei Pass by Reference, bet tai yra Pass by Object Reference.

Priklausomai nuo objekto tipo, kurį perduodate funkcijoje, funkcija veikia skirtingai. Nekintami objektai rodo praėjimą pagal reikšmę, o kintantys objektai rodo praėjimą pagal nuorodą.

Toliau pateiktame pavyzdyje galite patikrinti skirtumą tarp einamosios reikšmės ir nuorodos:

Python3




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

>

>

Išvestis

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

Aukščiau pateiktame kode parodėme, kaip Python savo programoje naudoja iškvietimo pagal nuorodą objekto koncepciją.

Perduodame sveikąjį skaičių funkcijoje call_by_value(). Sveikieji skaičiai yra nekintantys objektai, todėl Python veikia pagal iškvietimą pagal vertę, o funkcijos pakeitimai neatsispindi už funkcijos ribų.

Tada sąrašą perduodame funkcijai pagal nuorodą. Funkcijoje call_by_reference() perduodame sąrašą, kuris yra kintantis objektas. Python šioje funkcijoje veikia pagal iškvietimą pagal nuorodą, o funkcijos viduje atlikti pakeitimai taip pat gali būti matomi už funkcijos ribų.

Kintamasis nėra objektas

Čia a yra kintamasis, nurodantis sąrašą, kuriame yra elementai X ir Y. Tačiau pats a nėra sąrašas. Laikykite, kad a yra kibiras, kuriame yra objektai X ir Y.

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

Kas yra „Pass by Reference“ programoje „Python“?

Perdavimas pagal nuorodą reiškia, kad turite perduoti funkciją (nuorodą) kintamajam, o tai reiškia, kad kintamasis jau yra atmintyje.

Čia kintamasis (sąrašas) tiesiogiai perduodamas funkcijai. Kintamasis veikia kaip paketas, kuris ateina su jo turiniu (objektais).

Aukščiau pateiktame kodo paveikslėlyje sąrašas ir mano_sąrašas yra tas pats konteinerio kintamasis, todėl nurodo tą patį objektą atmintyje. Bet kokia funkcija, atliekama su kintamuoju arba objektu, bus tiesiogiai atspindėta funkcijos skambintojo. Pavyzdžiui, funkcija gali visiškai pakeisti kintamojo turinį ir nukreipti jį į visiškai kitą objektą:

Be to, funkcija gali iš naujo priskirti kintamojo turinį tokiu pačiu efektu, kaip nurodyta toliau:

Apibendrinant galima pasakyti, kad funkcija ir skambinantysis naudoja tą patį kintamąjį ir objektą.

Praeiti pro nuorodą Python pavyzdyje

Šiame pavyzdyje funkcija modify_list paima sąrašą pagal nuorodą. Funkcija prideda eilutę Geeks į perduodamų funkcijų sąrašą ir išspausdina ją. Kadangi sąrašai yra keičiami duomenų tipai, funkcijos viduje atlikti sąrašo pakeitimai taip pat atsispindi už funkcijos ribų, kaip matote išvestyje.

Python3




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

>

>

Išvestis

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

Kas yra „Pass by Value“ Python?

Taikydami šį metodą perduodame kopiją į faktiniai kintamieji funkcijoje kaip parametras. Taigi bet kokie parametrų pakeitimai funkcijos viduje neatsispindės faktiniame kintamajame.

Tas pats pasakytina apie bet kokią kintamojo ar objekto funkcijos atliekamą operaciją

Apibendrinant galima pasakyti, kad kintamųjų ir objektų kopijos funkcijos skambintojo kontekste yra visiškai izoliuotos.

Praleiskite reikšmę Python pavyzdyje

Čia mes perduosime sveikąjį skaičių x funkcijai, kuri yra nekintantis duomenų tipas. Tada atnaujiname sveikojo skaičiaus reikšmę funkcijos viduje ir išspausdiname atnaujintą reikšmę. Pakeitimai nėra matomi už funkcijos ribų, nes sveikieji skaičiai yra nekintantys duomenų tipai.

Python3

... Java




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

>

>

Išvestis:

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

Python programavimas naudoja perdavimo pagal nuorodą objekto koncepciją, perduodamas reikšmes funkcijoms. Šiame straipsnyje bandoma parodyti „Python“ perdavimo pagal vertę ir perdavimo pagal nuorodą sąvokas. Pavyzdžiais parodėme skirtingus reikšmių perdavimo atvejus. Vertybių perdavimas funkcijai Python skiriasi nuo kitų kodavimo kalbų, tačiau naudodamiesi šia pamoka galite lengvai suprasti koncepciją ir pritaikyti ją savo darbe.

Taip pat skaitykite:

Ar Python skambutis pagal nuorodą ar skambutis pagal vertę