Vývojáři přecházející do programování v Pythonu z jiných jazyků, jako je C++ a Java, jsou často zmateni procesem předávání argumentů v Pythonu. Objektově orientovaný datový model a jeho zpracování přiřazení jsou příčinou zmatku na základní úrovni.
V článku se budeme zabývat konceptem jak předat hodnotu odkazem v Pythonu a pokuste se porozumět příkladům pass-by-reference v Pythonu.
Obsah
- Pass by Value a Pass by Reference v Pythonu
- Proměnná není objekt
- Co je Pass by Reference v Pythonu?
- Co je Pass by Value v Pythonu?
Pass by Value a Pass by Reference v Pythonu
Po přečtení dopředu možná budete chtít něco udeřit, tak se vzpamatujte. Pythonův model předávání argumentů je ani Pass by Value ani Pass by Reference, ale je to Pass by Object Reference.
V závislosti na typu objektu, který ve funkci předáte, se funkce chová odlišně. Neměnné objekty ukazují průchod hodnotou, zatímco proměnlivé objekty ukazují průchod odkazem.
Rozdíl mezi předávanou hodnotou a předávanou referencí můžete zkontrolovat v příkladu níže:
Python3
def> call_by_value(x):> >x>=> x>*> 2> >print>(>'in function value updated to'>, x)> >return> > def> call_by_reference(>list>):> >list>.append(>'D'>)> >print>(>'in function list updated to'>,>list>)> >return> > my_list>=> [>'E'>]> num>=> 6> print>(>'number before='>, num)> call_by_value(num)> print>(>'after function num value='>, num)> print>(>'list before'>,my_list)> call_by_reference(my_list)> print>(>'after function list is '>,my_list)> |
>
>
Výstup
number before= 6 in function value updated to 12 after function num value= 6 list before ['E'] in function list updated to ['E', 'D'] after function list is ['E', 'D']>
Ve výše uvedeném kódu jsme si ukázali, jak Python ve svém programu používá koncept volání po referenčním objektu.
Ve funkci call_by_value() předáme celé číslo. Celá čísla jsou neměnné objekty, proto Python pracuje podle volání podle hodnoty a změny provedené ve funkci se neprojeví mimo funkci.
Poté seznam předáme funkci odkazem. Ve funkci call_by_reference() předáváme seznam, který je měnitelným objektem. Python funguje podle volání odkazem v této funkci a změny provedené uvnitř funkce lze také vidět mimo funkci.
Proměnná není objekt
Zde a je proměnná, která ukazuje na seznam obsahující prvky X a Y. Ale a samo o sobě není seznam. Považujte a za kbelík, který obsahuje objekt X a Y.
a = ['X', 'Y']>

java obrácení řetězce
Co je Pass by Reference v Pythonu?
Pass by reference znamená, že musíte předat funkci (odkaz) do proměnné, což znamená, že proměnná již existuje v paměti.
Zde je proměnná (kbelík) předána přímo do funkce. Proměnná funguje jako balíček, který přichází s jejím obsahem (objekty).

Na výše uvedeném obrázku kódu jsou seznam i my_list stejnou proměnnou kontejneru, a proto odkazují na stejný objekt v paměti. Jakákoli operace provedená funkcí na proměnné nebo objektu bude přímo reflektována volajícím funkce. Funkce by například mohla zcela změnit obsah proměnné a nasměrovat ji na zcela jiný objekt:

Funkce také může znovu přiřadit obsah proměnné se stejným účinkem, jak je uvedeno níže:

Abychom to shrnuli, v pass-by-reference používá funkce a volající stejnou proměnnou a objekt.
Předat odkaz v příkladu Pythonu
V tomto příkladu funkce upravit_seznam bere seznam odkazem. Funkce přidá řetězec Geeks do předávaného seznamu uvnitř funkce a vytiskne jej. Protože seznamy jsou proměnlivé datové typy, změny provedené v seznamu uvnitř funkce se projeví také mimo funkci, jak můžete vidět na výstupu.
Python3
def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)> |
>
>
Výstup
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Co je Pass by Value v Pythonu?
V tomto přístupu předáme kopii a aktuální proměnné ve funkci jako parametr. Jakákoli úprava parametrů uvnitř funkce se tedy neprojeví ve skutečné proměnné.

Totéž platí pro jakoukoli operaci prováděnou funkcí na proměnné nebo objektu

Abychom to shrnuli, kopie proměnných a objektů v kontextu volajícího funkce jsou zcela izolované.
Předat hodnotu v příkladu Pythonu
Zde předáme celé číslo x funkci, která je neměnným datovým typem. Poté aktualizujeme hodnotu celého čísla uvnitř funkce a vytiskneme aktualizovanou hodnotu. Změny nejsou vidět mimo funkci, protože celá čísla jsou neměnné datové typy.
Python3
def> modify_integer(x):> >x>=> x>+> 10> >print>(>'Inside function:'>, x)> > x>=> 5> print>(>'Before function call:'>, x)> modify_integer(x)> print>(>'After function call:'>, x)> |
>
>
Výstup:
Before function call: 5 Inside function: 15 After function call: 5>
Programování v Pythonu využívá koncept předávání referenčních objektů při předávání hodnot funkcím. Tento článek se vám snaží ukázat koncept předání hodnotou a předáním odkazem v Pythonu. Na příkladech jsme si ukázali různé případy předávání hodnot. Předávání hodnot do funkce v Pythonu se liší od jiných kódovacích jazyků, ale s tímto tutoriálem tento koncept snadno pochopíte a implementujete do své práce.
Přečtěte si také:
Je volání Pythonu odkazem nebo voláním hodnoty