Пропустить до содержимого

Как использовать и исправить передачу ссылки в Python?

CodeMDD.io

Передача по ссылке в Python: основные понятия и лучшие практики

Автор: Marius Mogyorosi


Если вы являетесь средним Python-разработчиком и хотите понять особенный подход Python к обработке аргументов функций, то этот учебник для вас. Вы реализуете реальные примеры использования передачи по ссылке в Python и узнаете несколько лучших практик, чтобы избежать проблем с аргументами ваших функций.

В этом учебнике вы научитесь:

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

Определение передачи по ссылке

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

  • Pass означает предоставление аргумента функции.
  • By reference означает, что аргумент, который вы передаете функции, является ссылкой на переменную, которая уже существует в памяти, а не независимой копией этой переменной.

Поскольку вы передаете функции ссылку на существующую переменную, все операции, выполняемые с этой ссылкой, напрямую влияют на переменную, на которую она ссылается. Давайте рассмотрим некоторые примеры, чтобы посмотреть, как это работает на практике.

Ниже вы увидите, как передавать переменные по ссылке в C#. Обратите внимание на использование ключевого слова ref в выделенных строках:

Пример на C#

using System;
class Program
{
static void Main(string[] args)
{
int arg;
https://codemdd.io/ Passing by reference.
https://codemdd.io/ The value of arg is passed as a "reference"
https://codemdd.io/ to the method Square and the result is
https://codemdd.io/ assigned back to that variable.
arg = 3;
Square(ref arg);
Console.WriteLine(arg);
https://codemdd.io/ Passing by value.
https://codemdd.io/ The value of arg is passed as a "copy"
https://codemdd.io/ to the method Square and the result is
https://codemdd.io/ not assigned back to the original variable.
arg = 4;
Square(arg);
Console.WriteLine(arg);
}
static void Square(ref int x)
{
x *= x;
}
static void Square(int x)
{
x *= x;
}
}

В этом примере показывается, как передавать аргументы по ссылке и по значению в C#. Когда аргумент передается по ссылке с использованием ключевого слова ref, изменения, внесенные в этот аргумент внутри функции, также отобразятся на переменной, на которую ссылается этот аргумент. В то же время, когда аргумент передается по значению, как в методе Square(int x), он передается копией значения, и изменения, внесенные в этом методе, не будут влиять на исходную переменную.


Продолжение статьи содержит детальные шаги, примеры кода и пояснения для каждого раздела, а также рекомендуемые практики и выводы.