Рубрики
Без рубрики

Как пройти переменную посредством ссылки в Python?

Резюме: Переменные передаются ссылкой на объект в Python. Следовательно, смежные объекты передаются посредством ссылки, когда неизменные объекты передаются по значению в Python. Чтобы пройти неизменные объекты по ссылке, вы можете вернуть и переназначить значение переменной или пропустить его в словаре / списке или создать класс и использовать себя … Как пройти переменную посредством ссылки в Python? Подробнее “

Автор оригинала: Shubham Sayon.

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

Проблема: Как пройти переменную посредством ссылки в Python?

Чтобы использовать функции и классы в Python или любом другом языке программирования, чрезвычайно важно, чтобы мы понимаем, как работает функция вызова, основанные на A Позвоните по ссылке или Вызов по значению или Позвоните по объекту Ссылка Отказ Давайте обсудим эти концепции один за другим, прежде чем мы достигнем окончательного решения.

Основы звонка по стоимости

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

Пример:

def func():
  a = 10
  print("Before Function call value of a = ",a)
  increment(a)
  print("After Function call is over value of a = ",a)
  print("Identity of a in func() is ",id(a))

def increment(k):
  a = k+10
  print("Inside function call Value of a = ",a)
  print("Identity of a in increment() is ",id(a))
  return a

func()

Выход:

Before Function call value of a =  10
Inside function call Value of a =  20
Identity of a in increment() is  140578841094464
After Function call is over value of a =  10
Identity of a in func() is  140578841094144

Основы звонка посредством ссылки

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

Позвоните по ссылке поддерживаются языками, такие как Java. Давайте посмотрим на небольшую программу Java для визуализации рабочей теоремы вызова ссылочного метода. ( Я намеренно использую Java здесь, чтобы мы могли сравнить и контрастировать различия, когда мы обсудим Позвоните по ссылочному методу объекта Использование Python через некоторое время .)

public class Reference{  
 int data=10;  
 
 public static void main(String args[]){  
   Reference obj=new Reference();  
  
   System.out.println("before change "+obj.data);  
   obj.change(obj);//passing object  
   System.out.println("after change "+obj.data);  
  
 }
 
 void change(Reference obj){  
 obj.data=obj.data+100;//changes will be in the instance variable  
 }  
     
} 

Выход:

before change 10
after change 110

Чтобы понять разницу с помощью ссылки и вызовите методы значений, посмотрите на анимацию, приведенную ниже:

Основы звонка по ссылке объекта

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

Python ни использует звонок по значению, ни звоните посредством ссылки. Он использует Call-Object-Reference/Call-назначение, что означает: –

  • Когда Музейный объект Как и список передается в функцию, он выполняет ссылку Call-Reference.
  • Когда неизменный объект Как и номер, строка или кортеж, передается на функцию, она выполняет Call-значение.

Пример: Следующая программа демонстрирует вышеуказанную концепцию, где Python выполняет ссылку Call-Rection в случае сочеловеческих объектов, таких как списки, когда Call-value в случае неизменного объекта, как строка: –

def refer(l):
  l.append(5)
  print("list inside function : ",l)
  return l

def value(n):
  name = "Python"
  print("Name within function : ",name)
  return name
 
li = [1,2,3,4]
print("list before function return : ",li)
refer(li)
print("list after function return : ",li)
name = "Finxter"
print("Name before function return : ",name)
value(name)
print("Name after function return : ",name)

Выход:

list before function return :  [1, 2, 3, 4]
list inside function :  [1, 2, 3, 4, 5]
list after function return :  [1, 2, 3, 4, 5]
Name before function return :  Finxter
Name within function :  Python
Name after function return :  Finxter

Теперь, когда приносит нас в критический вопрос:

Как пройти неизменной переменную посредством ссылки в Python?

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

Метод 1: вернуть новое значение и перенаправить

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

Это может быть немного запутанным, но в следующем коде сделано сделает все возможное для вас:

def change(n):
    n = "Sayon"
    return n

name = "Shubham"
print("Name before function call is ", name)
name = change(name)
print("Name after function call is ", name)

Выход:

Name before function call is  Shubham
Name after function call is  Sayon

Способ 2: Передача неизменных значений с использованием словарей или списков

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

Давайте посмотрим, как мы определяем строку и номер и передаем их как ссылку, используя список и словарь:

name = {'name': 'Christian'}
n = [4]
print("***Values Before Function Call***")
print("Name: ",name['name'])
print("Number: ",n[0])

def func(d):
  d['name'] = 'Mayer'

def foo(n):
  n[0] += 1

func(name)
foo(n)
print ("***Values After Function Call***")
print("Name: ",name['name'])
print("Number: ",n[0])

Выход:

***Values Before Function Call***
Name:  Christian
Number:  4
***Values After Function Call***
Name:  Mayer
Number:  5

Метод 3: использование класса и ключевого слова

Ключевое слово . Я используется для доступа к атрибутам экземпляра. Мы можем установить атрибуты внутри __init__ а затем изменить их значение в методах экземпляра.

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

class Changed:
    def __init__(self):
        self.var = 10
        print("Value before function call :",self.var)
        self.Change(self.var)
        print("Value after function call :",self.var)

    def Change(self,n):
        self.var = n+1

obj = Changed()

Выход:

Value before function call : 10
Value after function call : 11

Заключение

Ниже приведены ключевые вынос из этой статьи: –

  1. Основы вызова по стоимости.
  2. Основы звонка посредством ссылки.
  3. Основы звонка по ссылке на объект в Python для смежных и неизменных объектов.
  4. Методы пропустить неизменных объектов посредством ссылки в Python.

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

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @:

Оригинал: “https://blog.finxter.com/how-to-pass-a-variable-by-reference-in-python/”