Привет, народ,
Давайте проверим следующие функции:
def double(arg): """ This function takes 'arg' object and multiply it by 2. """ print('Before: ',arg) arg = arg * 2 print('After: ',arg) # Calling the function flist = [10,20] double(flist ) print('Original : ',flist )
Вывод будет таким:
До: [10, 20] После: [10, 20, 10, 20] Оригинал: [10, 20]
Это означает, что Arg
Объект передан функции по значению, и он изменяется только в функциональном номере. Умереть, что Python Разрешить пройти по значению и пройти через ссылку.
Вторая функция
def change(arg): """ This function takes 'arg' object and add '30' to it. """ print('Before: ',arg) arg.append(30) print('After: ',arg) # Calling the function slist = [10,20] change(slist) print('Original: ',slist)
Вывод будет таким:
До: [10, 20] После: [10, 20, 30] Оригинал: [10, 20, 30]
Это означает, что Arg
Объект передан на функцию посредством ссылки, и она изменяется в функциональном номере и в исходном объекте (просто это передается по адресу).
Давайте объясним, что здесь произойдет …
Поскольку Python позволяет двум типам прохождения объектов, почему вышеуказанные функции ведут себя по-разному?
В Python, если пропущенный объект – Musable Как и списки, словари и наборы всегда передаются в функцию посредством ссылки.
и за неизменный Как строки, целые числа, кортежи всегда передаются в функцию по значению.
Но кажется, что есть Ошибка . с переводчиком.
Чтобы понять, что случилось
Помните, что в первой функции Двойной
Объект ARG изменился с использованием Призначающее заявление Итак, что произошло, что правая сторона оператора присвоения выполняется и новый объект, созданный со значением arg * 2, а затем назначен Arg
Однако только функциональный набор, однако исходный объект все еще выходит в вызовов.
С другой стороны, потому что используя .append ()
Обе списки в функциональном номере и вызова код, затронутый функцией Append (), поскольку оба относятся к одному и тому же объекту.
Это объясняет, что случилось.
Я надеюсь, что эта небольшая статья была полезна.
Спасибо
Оригинал: “https://dev.to/tawfikyasser/calling-by-value-by-reference-in-python-12g6”