Python

Преминете от Референтен срещу. Стойност в Python

Преминете от Референтен срещу. Стойност в Python
След като знаете Python, можете да намерите случаи, при които функциите не променят аргументите на място, както бихте очаквали, особено ако сте запознати с много други компютърни езици. Много езици използват аргументи на метода като препратки, дефинирани като предаване от Препратка към текущи променливи. Ако сте напреднал разработчик на Python, който иска да разбере специфичния начин на Python за третиране на аргументи на метод, тогава това ръководство наистина е за вас.

Python поддържа препращане към препратка към обект

Pass-by-reference и pass-by-value са безспорно двата най-добре разпознати и лесно разбираеми начина за преминаване на параметри между езиците за програмиране. За съжаление Python е „препратка към обект-препратка“, нито „Предаване от стойност“, нито „Предаване от препратка“, често наричана „Обаждане чрез препратка към обект“, както и „Обаждане чрез споделяне“.„Полезно е да разгледате по-отблизо самата концепция, като я разделите на сегменти, докато се потопите в техническите специфики на преминаването от Референция:

Пропуск: това означава предоставяне на метод с аргумент.

По справка: това означава, че аргументът, който премествате в метода, се отнася до променлива, която сега се намира в хранилището вместо различна реплика на тази променлива.

Докато присвоявате на метода препратка към дефинирана променлива, променливата, на която тя отговаря, ще бъде изрично повлияна от всички операции с тази препратка. Сега нека разгледаме пример за това как на практика това работи. В този пример дефинирахме променлива 'спор със стойност от 4. По време на този сценарий променливата „спор не е модифициран на негово място. Изглежда, че Python обработва предоставения от вас аргумент, вместо препратка към настояща променлива като самостоятелна стойност.

Това би ли означавало, че вместо чрез Reference, Python премества аргументи по стойност? Python премества аргументи чрез присвояване, така че нито чрез Справка, нито със стойност. Логиката за това е двойна:

В момента параметърът, който се подава, е указател към обект. Определени типове данни могат да се променят, а някои не се променят.

Ако преместим изменяем обект във функция, функцията придобива препратка към същия обект, за да можете да мутирате всичко, за да удовлетворите душата си; външният обхват обаче няма да знае нищо, преди да се присъедините отново към референцията във функцията. След като приключите, външният справочник ще цели само действителния обект. Ако преместите неизменяем обект във функция, външната справка винаги не може да бъде свързана отново и не можете просто да мутирате обекта. За да направим нещата много по-ясни, нека разберем едно по едно.

Предайте референция

На първо място, трябва да разберете, че променливата 'mylist' сама по себе си не е списък, а се отнася до списък със стойности. Можете да извикате променливата 'mylist' контейнер със стойности в него. Стойностите в списъка са обекти. Променливата 'mylist' е директно доставена във функцията със съдържанието ѝ.

Както „списък“, така и „моят списък“ изглеждат една и съща променлива за съхранение в примера по-долу на кода и по този начин се прилагат към същия обект за съхранение. Ето защо на изход, той отпечатва 'Saeed.'

Всяко действие, извършено върху променливата или обекта, ще бъде незабавно огледално на метода на повикващия. Методът може изцяло да модифицира стойността на променливата и да я насочи към напълно различен обект. Както можете да видите във функцията 'set_list', сме променили съдържанието на списъка и сме отпечатали изцяло нов списък с елемента 'Aqsa.„Това е така, защото ние върнахме модифицирания списък и го отпечатахме на същия ред като обаждащия се.

Методът може също така да преразпредели елементите на променливата за същия резултат, както по-долу. Виждате, че сме добавили нова стойност към списъка и промяната е отразена. Добавихме уникален низ към списък и го върнахме на повикващия. В заключение, методът и повикващият са използвали една и съща променлива и обект през цялото отношение на преминаване.

Предайте по стойност

Чрез предаване по стойност методът се доставя с дубликат на аргументния обект, който повикващият му присвоява. Това гарантира, че оригиналният елемент остава непроменен и всички направени модификации се запазват на отделни места в паметта в реплика на същия обект.

Той е еднакво валиден за всички операции, изпълнявани върху променлива или обект по метода. Дубликати на променливи и обекти в обхвата на метода на повикващия са изцяло разделени, за да ги обобщят.

Предаване на обект по референция

По време на тази ситуация, тъй като Python е различен, методите на Python получават много подобна препратка към обекта в хранилището, към която се обажда повикващият. Обратно, техниката не получава променливата „mylist“ (контейнерът). Методът на повикващия съхранява същия обект; методът генерира нечий контейнер и генерира съвсем свеж индекс за своя собствена, точно както при предаване на стойност.

Повикващият и методът говорят за един и същ обект в хранилището, но когато добавеният метод прилага външен елемент към списък, обектът на повикващия се променя. Те имат множество етикети, но те са едни и същи неща. И двете променливи съдържат много подобен обект. Това е смисълът отзад на връзката му с движението на обекта. В хранилището методът и повикващият използват подобен обект, но все пак ги улавят чрез множество променливи. Променливата на повикващия (контейнерът) няма да бъде променена от модификации, направени в променливата на метода (контейнера); модифицират се само данните или съдържанието.

Заключение

Python работи независимо от езиците, които приемат преместването чрез Справка или стойност на аргументи. Аргументите на метода са локални променливи, които са разпределени за всяка стойност, прехвърлена към метода. Но това все още не ви пречи да постигнете същите резултати, които бихте намерили на други езици, докато премествате аргументи чрез прокси.

Как да използвам Xdotool за стимулиране на кликвания и натискания на мишката в Linux
Xdotool е безплатен инструмент с команден ред с отворен код за симулиране на щраквания и натискания на мишката. Тази статия ще обхване кратко ръководс...
Топ 5 продукти за ергономична компютърна мишка за Linux
Продължителната употреба на компютър причинява ли болка в китката или пръстите? Страдате ли от схванати стави и постоянно ли ви се налага да си ръкува...
Как да променяте настройките на мишката и тъчпада с помощта на Xinput в Linux
Повечето дистрибуции на Linux се доставят с библиотека “libinput” по подразбиране за обработка на входни събития в системата. Той може да обработва вх...