logo

Pāriet pēc atsauces pret vērtību Python

Izstrādātājus, kuri pāriet uz Python programmēšanu no citām valodām, piemēram, C++ un Java, Python argumentu nodošanas process bieži mulsina. Uz objektu orientētais datu modelis un tā attieksme pret piešķiršanu ir neskaidrības cēloņi fundamentālajā līmenī.

Rakstā mēs apspriedīsim jēdzienu kā Python nodot vērtību ar atsauci un mēģiniet izprast garāmejošus piemērus programmā Python.

Satura rādītājs



Pass by Value un Pass by Reference Python

Iespējams, vēlēsities kaut ko iesist pēc lasīšanas, tāpēc sagatavojieties. Python argumentu nodošanas modelis ir ne Pass by Value, ne Pass by Reference, bet tā ir Pass by Object Reference.

Atkarībā no objekta veida, kuru nododat funkcijā, funkcija darbojas atšķirīgi. Nemaināmi objekti rāda iet pēc vērtības, turpretim mainīgie objekti parāda iet pēc atsauces.

Tālāk esošajā piemērā varat pārbaudīt atšķirību starp garāmejošo vērtību un atsauci.

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

savienojumi un savienojumu veidi

>

>

Izvade

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

Iepriekš minētajā kodā mēs esam parādījuši, kā Python savā programmā izmanto izsaukuma pēc atsauces objekta koncepciju.

Mēs nododam veselu skaitli funkcijā call_by_value(). Veseli skaitļi ir nemainīgi objekti, tāpēc Python darbojas saskaņā ar izsaukumu pēc vērtības, un funkcijā veiktās izmaiņas netiek atspoguļotas ārpus funkcijas.

Pēc tam mēs nododam sarakstu funkcijai, izmantojot atsauci. Funkcijā call_by_reference() mēs nododam sarakstu, kas ir mainīgs objekts. Python šajā funkcijā darbojas saskaņā ar izsaukumu ar atsauci, un funkcijā veiktās izmaiņas var redzēt arī ārpus funkcijas.

Mainīgais nav objekts

Šeit a ir mainīgais, kas norāda uz sarakstu, kurā ir elementi X un Y. Bet pats a nav saraksts. Uzskatiet, ka a ir spainis, kurā ir objekts X un Y.

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

Kas ir Pass by Reference programmā Python?

Nodot ar atsauci nozīmē, ka jums ir jānodod funkcija (atsauce) mainīgajam, kas nozīmē, ka mainīgais jau pastāv atmiņā.

Šeit mainīgais (spainis) tiek tieši nodots funkcijai. Mainīgais darbojas kā pakotne, kas nāk ar tā saturu (objektiem).

foreach cilpas mašīnraksts

Iepriekš minētajā koda attēlā gan saraksts, gan mans_saraksts ir viens un tas pats konteinera mainīgais un tāpēc attiecas uz vienu un to pašu objektu atmiņā. Visas darbības, ko funkcija veic mainīgajam vai objektam, tieši atspoguļos funkcijas izsaucējs. Piemēram, funkcija var pilnībā mainīt mainīgā saturu un novirzīt to uz pilnīgi citu objektu:

Turklāt funkcija var atkārtoti piešķirt mainīgā saturu ar tādu pašu efektu, kā norādīts tālāk:

Rezumējot, garāmejot, funkcija un zvanītājs izmanto vienu un to pašu mainīgo un objektu.

Iet garām atsaucei Python piemērā

Šajā piemērā funkcija modify_list ņem sarakstu pēc atsauces. Funkcija pievieno virkni Geeks nodoto sarakstam funkcijas iekšpusē un izdrukā to. Tā kā saraksti ir maināmi datu tipi, izmaiņas, kas veiktas sarakstā funkcijā, tiek atspoguļotas arī ārpus funkcijas, kā redzat izvadē.

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

>

>

Izvade

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

Kas ir Pass by Value Python?

Izmantojot šo pieeju, mēs nododam kopiju uz faktiskie mainīgie funkcijā kā parametrs. Tādējādi visas funkcijas parametru izmaiņas neatspoguļosies faktiskajā mainīgajā.

Tas pats attiecas uz jebkuru darbību, ko veic mainīgā vai objekta funkcija

Rezumējot, mainīgo un objektu kopijas funkcijas izsaucēja kontekstā ir pilnībā izolētas.

Paiet garām vērtībai Python piemērā

Šeit mēs nodosim veselu skaitli x funkcijai, kas ir nemainīgs datu tips. Pēc tam funkcijas ietvaros atjauninām veselā skaitļa vērtību un izdrukājam atjaunināto vērtību. Izmaiņas nav redzamas ārpus funkcijas, jo veseli skaitļi ir nemainīgi datu tipi.

Python3




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

>

>

Izvade:

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

Python programmēšana izmanto nodošanas pēc atsauces objekta koncepciju, vienlaikus nododot vērtības funkcijām. Šajā rakstā ir mēģināts parādīt Python jēdzienu “nodot pēc vērtības” un “nodot pēc atsauces”. Mēs esam parādījuši dažādus vērtību nodošanas gadījumus ar piemēriem. Vērtību nodošana funkcijai Python atšķiras no citām kodēšanas valodām, taču, izmantojot šo pamācību, varat viegli saprast koncepciju un ieviest to savā darbā.

klase vs objekts java

Lasi arī:

Vai Python izsaukums pēc atsauces vai izsaukums pēc vērtības