Python

Пропустить по ссылке vs. Значение в Python

Пропустить по ссылке vs. Значение в Python
Зная Python, вы можете найти случаи, когда функции не изменяют аргументы в одном месте, как вы ожидали, особенно если вы знакомы со многими другими компьютерными языками. Многие языки используют аргументы метода как ссылки, определенные как передачу по ссылке на текущие переменные. Если вы продвинутый разработчик Python, который хочет понять особый способ Python обработки аргументов метода, то это руководство действительно для вас.

Python поддерживает передачу по ссылке на объект

Передача по ссылке и передача по значению, несомненно, являются двумя наиболее хорошо известными и легко понятными способами передачи параметров между языками программирования. К сожалению, Python - это «передача по объектной ссылке», ни «передача по значению», ни «передача по ссылке», часто называемая «вызов по ссылке на объект», а также «вызов по общей ссылке».«Полезно более внимательно изучить саму концепцию, разбив ее на сегменты, пока вы погружаетесь в технические особенности передачи по ссылке:

Проходить: это означает предоставление метода с аргументом.

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

Когда вы назначаете методу ссылку на определенную переменную, переменная, которой она соответствует, будет явно зависеть от всех операций с этой ссылкой. Теперь давайте рассмотрим пример того, как это работает на практике. В этом примере мы определили переменную 'arg ' имеющий ценность 4. В этом сценарии переменная 'arg ' не был изменен вместо. Python, похоже, обрабатывает ваш предоставленный аргумент вместо ссылки на текущую переменную как автономное значение.

Означает ли это, что вместо ссылки Python перемещает аргументы по значению? Python перемещает аргументы через присваивание, поэтому ни по ссылке, ни по значению. Логика здесь двоякая:

В настоящее время передаваемый параметр является указателем на объект. Некоторые типы данных изменяемы, а некоторые неизменяемы.

Если мы переместим изменяемый объект в функцию, функция получит ссылку на тот же самый объект, так что вы можете изменить все это к удовлетворению вашей души; однако внешняя область ничего не узнает, прежде чем вы снова присоединитесь к ссылке в функции. Как только вы закончите, внешняя ссылка будет нацелена только на реальный объект. Если вы перемещаете неизменяемый объект в функцию, внешняя ссылка всегда не может быть повторно связана, и вы не можете просто изменить объект. Чтобы упростить задачу, давайте разберемся по порядку.

Пропустить по ссылке

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

И «список», и «мой список» кажутся одной и той же переменной хранилища в приведенном ниже примере кода и, таким образом, применяются к одному и тому же объекту хранилища. Вот почему на выходе печатается 'Саид.'

Любое действие, выполненное с переменной или сущностью, будет немедленно отражено в вызывающем методе. Метод может полностью изменить значение переменной и направить его на совершенно отдельный объект. Как вы можете видеть в функции «set_list», мы изменили содержимое списка и напечатали полностью новый список с элементом «Aqsa.'Это потому, что мы вернули измененный список и распечатали его в той же строке, что и вызывающий.

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

Передавать по значению

При передаче по значению методу предоставляется дубликат объекта аргумента, который ему назначает вызывающий. Это гарантирует, что исходный элемент останется неизменным, а все внесенные изменения сохранятся в отдельных ячейках памяти в реплике того же объекта.

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

Передать объект по ссылке

В этой ситуации, поскольку Python отличается, методы Python получают очень похожую ссылку на объект в хранилище, поскольку вызывающая сторона ссылается на. И наоборот, метод не получает переменную mylist (контейнер). Вызывающий метод хранит тот же объект; метод генерирует свой контейнер и генерирует совершенно новый индекс для своего собственного, точно так же, как при передаче по значению.

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

Заключение

Python работает независимо от языков, которые принимают перемещение по ссылке или значению аргументов. Аргументы метода - это локальные переменные, которые были назначены каждому значению, переданному методу. Но это по-прежнему не мешает вам получить те же результаты, что и на других языках, при перемещении аргументов по доверенности.

Экранный трекпад и указатель мыши AppyMouse для планшетов с Windows
Пользователи планшетов часто пропускают указатель мыши, особенно когда они привыкли пользоваться ноутбуками. Смартфоны и планшеты с сенсорным экраном ...
Средняя кнопка мыши не работает в Windows 10
В средняя кнопка мыши помогает пролистывать длинные веб-страницы и экраны с большим объемом данных. Если это прекратится, вы в конечном итоге будете и...
Как изменить левую и правую кнопки мыши на ПК с Windows 10
Совершенно нормально, что все устройства компьютерной мыши эргономичны для правшей. Но есть мышиные устройства, специально разработанные для левшей ил...