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

Вызов по значению против звонка по ссылке

Вызов по значению и вызове посредством ссылки – это два типа универсальных методов для передачи параметров на функцию … Помечено Python, программирование, OOP.

Вызов по значению и призовов посредством ссылки – это два типа универсальных методов для передачи параметров на функцию. C ++ использует вызов по сравнению со значением, в то время как Java использует вызов ссылочным методом. Но что делает Python? Использует ли Python Call по значению или позвонить посредством передачи параметров к функции? Давайте разберемся ……

Пример 1.

def add_num(number):
    number += 1

n = 12

add_num(n)
print(n)                          # 12

Здесь он вообще не меняет значение n. Таким образом, кажется, что Python использует вызов по значению методом для передачи параметров. Но это правильно? Давайте посмотрим другой пример, чтобы подтвердить это …

Пример 2.

def add_element(num_list):
    num_list.append(5)

my_list = [1,2,3,4]
add_element(my_list)
print(my_list)                             # [1,2,3,4,5]

Это странно! Пример 2 говорит нам, что Python использует вызов ссылочным методом для передачи параметров.

Это два противоречивых примера сами по себе!

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

Объяснение

Прежде всего помните простую основную вещь о Python I.e все в Python – это объект.

В 2-м примере, когда мы называем функцию Add_Element и пройти my_list В качестве параметра мы передаем весь объект как параметр, и этот объект отображается на num_list Отказ Так что сейчас num_list и my_list указывают на тот же список я [1,2,3,4] Итак, теперь какие изменения внесены в этот список, будь то по my_list или по num_list будет сделан в оригинальном списке

Если вы хотите подтвердить это, вы можете использовать ID () Функция на обоих мой список и num_list И можно увидеть то же самое для себя.

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

Теперь вы бы спросили, в Примере 1 не n Также объект int? Так технически ценность n Должно также изменить, но это не так. Почему? Давайте решим, что таинственность тоже

Давайте снова пойдем в основные основы. В 2-м примере мы использовали объект и списки списка, и в 1-м примере мы использовали объект INT и INT неизменен. Так что на самом деле происходит в примере 1, это когда мы увеличиваем значение n Поскольку Int неизменяется, функция создает новый контейнер и хранилище в нем увеличенное значение n в то время как оригинал n остается такой же.

Вывод

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

Надеюсь, что ваше замешательство ясно

Если у вас все еще есть сомнения, не стесняйтесь связываться со мной на Твиттер

Оригинал: “https://dev.to/daultaniishann/call-by-value-vs-call-by-reference-4e62”