Python

Передати Посилання проти. Значення в Python

Передати Посилання проти. Значення в Python
Знаючи Python, ви можете знайти випадки, коли функції не змінюють аргументи в місці, як ви очікували, особливо якщо ви знайомі з багатьма іншими комп'ютерними мовами. Багато мов використовують аргументи методів як посилання, що визначаються як передача посиланням на поточні змінні. Якщо ви досвідчений розробник Python, який хоче зрозуміти конкретний спосіб обробки аргументів методу, то цей посібник дійсно для вас.

Python підтримує посилання на об'єкт

Передача-посилання та передача-значення є, безперечно, двома найбільш відомими та легко зрозумілими способами передачі параметрів між мовами програмування. На жаль, Python є "посиланням на передачу-об'єкт", ні "Передати значення", ні "Передати посилання", що часто називається "Виклик за посиланням на об'єкт", а також "Виклик шляхом спільного використання".”Корисно уважніше розглянути саму концепцію, розділивши її на сегменти, занурюючись у технічні особливості проходження повз Довідника:

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

За посиланням: це означає, що аргумент, який ви переносите до методу, посилається на змінну, яка тепер знаходиться у сховищі замість іншої репліки цієї змінної.

Коли ви призначаєте методу посилання на визначену змінну, на змінну, якій вона відповідає, будуть явно впливати всі операції з цим посиланням. А тепер розглянемо приклад того, як на практиці це працює. У цьому прикладі ми визначили змінну 'сварка що мають значення 4. У цьому сценарії змінна 'сварка не був змінений на своєму місці. Здається, Python обробляє наданий вами аргумент замість посилання на поточну змінну як самостійне значення.

Чи означає це, що замість посилання, Python переміщує аргументи за значенням? Python переміщує аргументи через присвоєння, отже, ні за посиланням, ні за значенням. Логіка цього подвійна:

В даний час параметр, що передається, є покажчиком на об'єкт. Деякі типи даних можна змінювати, а деякі не змінювати.

Якщо ми переносимо змінний об'єкт у функцію, функція отримує посилання на той самий об'єкт, щоб ви могли все це мутувати, щоб задовольнити вашу душу; однак зовнішня область не знатиме нічого до того, як ви знову приєднаєтеся до Посилання у функції. Після того, як ви закінчите, зовнішнє посилання буде націлено лише на фактичний об'єкт. Якщо ви переміщуєте незмінний об'єкт до функції, зовнішнє посилання завжди не може бути перезакріплене, і ви не можете просто мутувати об'єкт. Щоб зробити речі набагато простішими, давайте розберемося по черзі.

Передайте посилання

Перш за все, ви повинні розуміти, що сама змінна 'mylist' не є списком, а посилається на список зі значеннями. Ви можете викликати змінну 'mylist' контейнером, що має значення всередині нього. Значення списку є об'єктами. Змінна 'mylist' була безпосередньо доставлена ​​у функцію зі своїм вмістом.

Здається, що і «список», і «мій список» є однаковою змінною сховища в прикладі коду нижче, і, отже, застосовуються до того самого об'єкта зберігання. Ось чому на виході він друкує 'Saeed.'

Будь-яка дія, виконана зі змінною чи суттю, буде негайно віддзеркалена до методу, що викликає. Метод може повністю модифікувати значення змінної та націлити його на цілком окремий об'єкт. Як ви можете бачити у функції 'set_list', ми змінили вміст списку та надрукували цілий новий список із елементом 'Aqsa.'Це тому, що ми повернули змінений список і надрукували його в тому самому рядку, що і абонент.

Метод може також перерозподілити елементи змінної для того самого результату, що наведений нижче. Ви бачите, що ми додали нове значення до списку, і зміна була відображена. Ми додали унікальний рядок до списку та повернули його абоненту. На закінчення слід сказати, що метод і виклик використовують одну і ту ж змінну та об’єкт протягом усього відношення проходження.

Передайте значення

Через передавання за значенням метод отримує дублікат об'єкта аргументу, який абонент призначає йому. Це гарантує, що оригінальний елемент залишається незмінним, а всі внесені зміни зберігаються в окремих місцях пам'яті в копії того самого об'єкта.

Це однаково справедливо для будь-яких операцій, що виконуються над змінною або суттю методом. Дублікати змінних та об'єктів у області дії методу, що викликає, повністю відокремлені, щоб підсумувати їх.

Передати об’єкт за посиланням

У цій ситуації, оскільки Python відрізняється, методи Python отримують дуже схоже посилання на об'єкт у сховищі, на яке посилається абонент. І навпаки, техніка не отримує змінну 'mylist' (контейнер). Метод абонента зберігає той самий об'єкт; метод генерує власний контейнер і генерує цілком свіжий індекс для власного, точно так само, як і при передачі значення.

Виклик та метод говорять про один і той же об'єкт у сховищі, але коли доданий метод застосовує зовнішній елемент до списку, сутність виклику змінюється. Вони мають кілька ярликів, але це однакові речі. Обидві змінні містять дуже схожий об'єкт. У цьому полягає сенс його відношення до руху об’єкта. У сховищі метод і виклик використовують подібний об'єкт, проте ловлять їх через кілька змінних. Змінна виклику (контейнер) не буде змінена будь-якими змінами, внесеними до змінної методу (контейнер); змінюються лише дані або вміст.

Висновок

Python працює незалежно від мов, які приймають переміщення за посиланням або значенням аргументів. Аргументи методу - це локальні змінні, які були призначені кожному значенню, переданому методу. Але це все одно не заважає вам отримувати ті самі результати, які ви знайдете іншими мовами, переміщуючи аргументи за допомогою проксі.

Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...
WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...