Автор оригинала: 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
Заключение
Ниже приведены ключевые вынос из этой статьи: –
- Основы вызова по стоимости.
- Основы звонка посредством ссылки.
- Основы звонка по ссылке на объект в Python для смежных и неизменных объектов.
- Методы пропустить неизменных объектов посредством ссылки в Python.
Я надеюсь, что вы нашли эту статью полезную. Пожалуйста, подпишитесь и оставайтесь настроенными для более интересных статей в будущем!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/how-to-pass-a-variable-by-reference-in-python/”