Прођите поред референце у односу на вредност у Питхону

Pass Reference Vs



Након што сте упознали Питхон, можете пронаћи случајеве у којима функције не мењају аргументе на месту као што бисте очекивали, посебно ако сте упознати са многим другим рачунарским језицима. Многи језици користе аргументе метода као референце, дефинисане као пролажење референцом на тренутне променљиве. Ако сте напредни Питхон програмер који жели да схвати Питхонов посебан начин третирања аргумената метода, онда је овај водич заиста за вас.

Питхон подржава Пасс би Објецт Референце

Пасс-би-референце и пасс-би-валуе несумњиво су два најпрепознатљивија и лако разумљива начина за прелазак параметара између програмских језика. Питхон је, нажалост, „пролаз кроз објекат-референцу“, нити пролази по вредности нити пролази по референци, често се назива и позивом по објекту, као и позивом дељењем. Корисно је пажљивије погледати сам концепт тако што ћете га поделити на сегменте док се упуштате у техничке специфичности проласка поред Референце:







Пропусница: то значи снабдевање метода аргументом.



По референци: то значи да се аргумент који преместите на метод односи на променљиву која се сада налази у складишту уместо на другу реплику те променљиве.



Док методи доделите референцу дефинисаној променљивој, на променљиву којој она одговара изричито ће утицати све операције на овој референци. Размотримо сада примјер како то у пракси функционира. У овом примеру смо дефинисали променљиву „ љут' који имају вредност од 4 . У овом сценарију променљива „ љут' није измењен на свом месту. Чини се да Питхон обрађује ваш аргумент уместо референце на садашњу променљиву као самосталну вредност.





Да ли би то значило да уместо помоћу референце, Питхон премешта аргументе по вредности? Питхон премешта аргументе кроз доделу, дакле ни референцом нити вредношћу. Логика за ово је двострука:



Тренутно, параметар који се прослеђује је показивач на објекат. Одређене врсте података су променљиве, а неке нису променљиве.

Ако преместимо променљиви објекат у функцију, функција добија референцу на исти објект тако да можете све то мутирати на задовољство ваше душе; међутим, спољни опсег не би знао ништа пре него што се поново придружите референци у функцији. Када завршите, спољна референца ће циљати само на стварни објекат. Ако преместите непроменљиви објекат у функцију, спољна референца се увек не може поново повезати и не можете само мутирати објекат. Да ствари буду јасније, схватимо једну по једну.

Проћи референцом

Пре свега, морате схватити да променљива „милист“ сама по себи није листа, већ се односи на листу која има вредности. Променљиву „милист“ можете назвати контејнером у коме се налазе вредности. Вредности листе су објекти. Променљива „милист“ је директно испоручена у функцију са њеним садржајем.

Чини се да су и листа и моја листа исте променљиве за складиштење у доњем примеру кода и стога се примењују на исти објекат за складиштење. Зато на излазу штампа „Саеед“.

Свака акција учињена на променљивој или ентитету била би одмах пресликана на метод позиваоца. Метода може у потпуности изменити вредност променљиве и усмерити је на потпуно различит објекат. Као што видите у функцији „сет_лист“, променили смо садржај листе и одштампали потпуно нову листу са елементом „Акса.“ То је зато што смо вратили измењену листу и одштампали је у истом реду као и позивалац.

Метода такође може прерасподелити елементе променљиве за исти резултат као доле. Можете видети да смо листи додали нову вредност и да је промена одражена. Додали смо јединствени низ листи и вратили је позиваоцу. Закључно, метода и позивалац су користили исту променљиву и објекат током пролазне везе.

Пренесите вредност

Кроз пролазну вредност, методу се испоручује дупликат објекта аргумента који му позивалац додељује. Ово осигурава да оригинална ставка остане непромењена и да се све извршене измене задрже на засебним меморијским локацијама у реплици истог објекта.

Једнако је валидно за све операције које се према варијабли или ентитету изводе методом. Дупликати променљивих и објеката у опсегу методе позиваоца потпуно су одвојени како би их сажели.

Пренесите објекат референцом

У читавој овој ситуацији, будући да се Питхон разликује, Питхон -ове методе добијају врло сличну референцу објекта у складишту на коју се позивалац позива. Насупрот томе, техника не добија променљиву „милист“ (контејнер). Метода позиваоца чува исти објекат; метода генерише сопствени контејнер и генерише потпуно свеж индекс за себе, баш као и у пролазној вредности.

Позивалац и метода говоре о истом објекту у складишту, али када додата метода примени спољну ставку на листу, ентитет позиваоца се мења. Имају више ознака, али то су исте ствари. Обе променљиве држе веома сличан објекат. То је смисао иза њеног односа према кретању по објекту. У меморији метода и позивалац користе сличан објекат, али их хватају кроз више променљивих. Променљива позиваоца (контејнер) неће бити промењена никаквим изменама у променљивој методе (контејнер); мењају се само подаци или садржај.

Закључак

Питхон ради независно од језика који прихватају померање по референци или вредности аргумената. Аргументи методе су локалне варијабле које су додијељене свакој вриједности пренесеној у методу. Али то вас и даље не спречава да постигнете исте исходе које бисте пронашли на другим језицима док премештате аргументе путем пуномоћника.