Python

Garām ar atsauci vs. Vērtība Python

Garām ar atsauci vs. Vērtība Python
Pēc Python pārzināšanas jūs varat atrast gadījumus, kad funkcijas nemaina vietas argumentus, kā jūs to varētu paredzēt, it īpaši, ja esat iepazinies ar daudzām citām datoru valodām. Daudzās valodās metodes atsauces tiek izmantotas kā atsauces, kas definētas kā pārejas ar atsauci uz pašreizējiem mainīgajiem. Ja esat uzlabots Python izstrādātājs, kurš vēlas izprast īpašo Python metodi argumentu apstrādes veidā, šī rokasgrāmata ir domāta jums.

Python atbalsta Pass by Object Reference

Pass-by-reference un pass-by-value nenoliedzami ir divi vispazīstamākie un viegli saprotamākie parametru pārejas veidi starp programmēšanas valodām. Skumji, ka Python ir “garāmbraucoša objekta atsauce”, nedz “Pass by Value”, nedz “Pass by Reference”, ko bieži sauc par “Call by Object Reference”, kā arī “Call by Sharing."Ir lietderīgi rūpīgāk aplūkot pašu koncepciju, sadalot to pa segmentiem, kamēr jūs iedziļināties tehniskajā specifikā, kas iet cauri atsaucei:

Pass: tas nozīmē metodes piegādi ar argumentu.

Pēc atsauces: tas nozīmē, ka arguments, kuru pāriet uz metodi, attiecas uz mainīgo, kas tagad atrodas krātuvē, nevis šī mainīgā atšķirīgā kopija.

Piešķirot metodei atsauci uz definētu mainīgo, mainīgo, kuram tas atbilst, skaidri ietekmēs visas šīs atsauces darbības. Tagad aplūkosim piemēru, kā tas praktiski darbojas. Šajā piemērā mēs esam definējuši mainīgo 'arg ' kuru vērtība ir 4. Šajā scenārijā mainīgais 'arg ' netika modificēts tās vietā. Šķiet, ka Python apstrādā jūsu sniegto argumentu, nevis atsauci uz pašreizējo mainīgo kā patstāvīgu vērtību.

Vai tas nozīmētu, ka nevis atsauces vietā, Python argumentus pārvieto pēc vērtības? Python pārvieto argumentus, izmantojot piešķiršanu, tāpēc ne ar atsauci, ne ar vērtību. Loģika tam ir divējāda:

Pašlaik parametrs, kas iet iekšā, ir objekta rādītājs. Daži dati ir maināmi, un daži nav maināmi.

Ja mēs pārvietojam maināmu objektu uz funkciju, funkcija iegūst atsauci uz to pašu objektu, lai jūs varētu to visu mutēt, lai apmierinātu jūsu dvēseli; tomēr ārējā darbības joma neko nezinātu, pirms jūs atkal pievienojaties funkcijai Reference. Kad esat pabeidzis, ārējā atsauce būs vērsta tikai uz faktisko objektu. Ja pārvietojat nemaināmu objektu uz funkciju, ārējo atsauci vienmēr nevar atkārtoti piesaistīt, un jūs nevarat vienkārši mutēt objektu. Lai viss būtu daudz vienkāršāk, sapratīsim pa vienam.

Pass Pass Reference

Pirmkārt, jums ir jāsaprot, ka mainīgais “mylist” pats par sevi nav saraksts, bet attiecas uz sarakstu ar vērtībām. Varat saukt mainīgo “mylist” par konteineru, kurā ir vērtības. Saraksta vērtības ir objekti. Mainīgais 'mylist' ir tieši ievadīts funkcijā ar tā saturu.

Gan “saraksts”, gan “mans saraksts”, šķiet, ir viens un tas pats krātuves mainīgais zemāk redzamajā kodu piemērā un tādējādi attiecas uz to pašu krātuves objektu. Tāpēc uz izejas tas izdrukā “Saeed”."

Jebkura darbība, kas veikta ar mainīgo vai entītiju, nekavējoties tiks atspoguļota zvanītāja metodē. Metode var pilnībā pārveidot mainīgā vērtību un virzīt to uz pilnīgi atšķirīgu objektu. Kā redzat funkcijā 'set_list', mēs esam mainījuši saraksta saturu un izdrukājuši pilnīgi jaunu sarakstu ar elementu 'Aqsa."Tas ir tāpēc, ka mēs esam atgriezuši modificēto sarakstu un izdrukājuši to vienā rindā ar zvanītāju.

Metode var arī pārdalīt mainīgā elementus ar tādu pašu rezultātu kā zemāk. Var redzēt, ka mēs sarakstam esam pievienojuši jaunu vērtību, un izmaiņas ir atspoguļotas. Mēs esam pievienojuši unikālu virkni sarakstam un atgriezuši to zvanītājam. Noslēgumā jāsaka, ka metode un zvanītājs visā garāmbrauciena attiecībās ir izmantojuši vienu un to pašu mainīgo un objektu.

Garām garām

Izmantojot caurlaides vērtību, metode tiek piegādāta ar argumenta objekta dublikātu, kuru zvanītājs tam piešķir. Tas nodrošina, ka sākotnējais vienums paliek nemainīgs un visas veiktās modifikācijas tiek saglabātas atsevišķās atmiņas vietās tā paša objekta kopijā.

Tas ir vienlīdz derīgs visām operācijām, kas veiktas ar mainīgo vai entītiju pēc metodes. Zvanītāja metodes darbības sfērā esošo mainīgo un objektu dublikāti ir pilnībā nošķirti, lai tos apkopotu.

Pass objektu ar atsauci

Šajā situācijā, tā kā Python ir atšķirīgs, Python metodes krātuvē iegūst ļoti līdzīgu objekta atsauci, uz kuru atsaucas zvanītājs. Un otrādi, ar tehniku ​​netiek iegūts mainīgais “mylist” (konteiners). Zvanītāja metode saglabā to pašu objektu; metode ģenerē savu konteineru un ģenerē sev pilnīgi jaunu indeksu, tāpat kā garāmbraucošo vērtību.

Zvanītājs un metode runā par vienu un to pašu objektu krātuvē, bet, kad pievienotā metode sarakstam piemēro ārēju vienumu, zvanītāja entītija tiek modificēta. Viņiem ir vairākas etiķetes, taču tās ir vienas un tās pašas lietas. Abiem mainīgajiem ir ļoti līdzīgs objekts. Tāda jēga ir tās saistība ar pārvietošanos pa objektu. Krātuvē metode un zvanītājs izmanto līdzīgu objektu, tomēr tos uztver, izmantojot vairākus mainīgos. Zvanītāja mainīgais (konteiners) netiks mainīts, veicot metodes mainīgā (konteinera) izmaiņas; tiek modificēti tikai dati vai saturs.

Secinājums

Python darbojas neatkarīgi no valodām, kuras pieņem pārvietošanu ar atsauci vai argumentu vērtību. Metodes argumenti ir lokālie mainīgie, kas piešķirti katrai metodei pārskaitītajai vērtībai. Bet tas joprojām neliedz jums iegūt tādus pašus rezultātus, kādus jūs varētu atrast citās valodās, pārvietojot argumentus ar starpniekservera starpniecību.

Komerciālo spēļu dzinēju atvērtā koda porti
Bezmaksas, atvērtā koda un starpplatformu spēļu dzinēju atpūtu var izmantot, lai spēlētu vecos, kā arī dažus no diezgan nesenajiem spēļu nosaukumiem. ...
Labākās komandrindas spēles Linux
Komandrinda nav tikai lielākais sabiedrotais, lietojot Linux, bet tā var būt arī izklaides avots, jo to var izmantot, lai spēlētu daudzas jautras spēl...
Labākās Linux spēļu gamepad kartēšanas lietotnes
Ja jums patīk spēlēt spēles Linux ar parastu tastatūru, nevis parasto tastatūru un peles ievades sistēmu, jums ir dažas noderīgas lietotnes. Daudzas d...