Ontwikkelaars die vanuit andere talen zoals C++ en Java in Python-programmering duiken, raken vaak in de war door het proces van het doorgeven van argumenten in Python. Het objectcentrische datamodel en de manier waarop het wordt toegewezen zijn de oorzaken van de verwarring op het fundamentele niveau.
In dit artikel bespreken we het concept van hoe u een waarde door verwijzing doorgeeft in Python En probeer pass-by-referentievoorbeelden te begrijpen in Python.
Inhoudsopgave
- Pass by Value en Pass by Reference in Python
- De variabele is niet het object
- Wat is Pass by Reference in Python?
- Wat is Pass-by-waarde in Python?
Pass by Value en Pass by Reference in Python
Misschien wil je iets zeggen nadat je vooruit hebt gelezen, dus zet je schrap. Het argument-doorgeefmodel van Python is dat wel noch Pass by Value, noch Pass by Reference, maar het is Pass by Object Reference.
Afhankelijk van het type object dat u in de functie doorgeeft, gedraagt de functie zich anders. Onveranderlijke objecten tonen pass-by-waarde, terwijl veranderlijke objecten pass-by-referentie tonen.
In het onderstaande voorbeeld kunt u het verschil tussen pass-by-waarde en pass-by-referentie controleren:
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)> |
>
>
Uitvoer
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']>
In de bovenstaande code hebben we laten zien hoe Python het call-by-reference-objectconcept in zijn programma gebruikt.
binaire boom postorder traversal
We geven een geheel getal door in de functie call_by_value(). Gehele getallen zijn onveranderlijke objecten, daarom werkt Python volgens call by value, en de wijzigingen die in de functie worden aangebracht, worden niet buiten de functie weerspiegeld.
Vervolgens geven we de lijst door aan de functie door middel van referentie. In de functie call_by_reference() geven we een lijst door die een veranderbaar object is. Python werkt in deze functie volgens call by reference en de wijzigingen die binnen de functie zijn aangebracht, zijn ook buiten de functie te zien.
De variabele is niet het object
Hier is a een variabele die verwijst naar een lijst met de elementen X en Y. Maar a zelf is geen lijst. Beschouw a als een emmer die de objecten X en Y bevat.
a = ['X', 'Y']>

Wat is Pass by Reference in Python?
Doorgeven via referentie betekent dat u de functie (referentie) moet doorgeven aan een variabele, wat betekent dat de variabele al in het geheugen bestaat.
Hier wordt de variabele (de bucket) rechtstreeks aan de functie doorgegeven. De variabele fungeert als een pakket dat wordt geleverd met de inhoud ervan (de objecten).

In de bovenstaande codeafbeelding zijn zowel list als my_list dezelfde containervariabele en verwijzen daarom naar hetzelfde object in het geheugen. Elke bewerking die door de functie op de variabele of het object wordt uitgevoerd, wordt direct weerspiegeld door de functieaanroeper. De functie kan bijvoorbeeld de inhoud van de variabele volledig veranderen en naar een heel ander object verwijzen:

Ook kan de functie de inhoud van de variabele opnieuw toewijzen met hetzelfde effect als hieronder:

Samenvattend: bij pass-by-referentie gebruiken de functie en de aanroeper dezelfde variabele en hetzelfde object.
Pass by Reference in Python-voorbeeld
In dit voorbeeld neemt de functie modificeren_lijst een lijst ter referentie. De functie voegt de string Geeks toe aan de doorgegeven lijst binnen de functie en drukt deze af. Omdat lijsten veranderlijke gegevenstypen zijn, worden de wijzigingen die in de lijst binnen de functie worden aangebracht, ook buiten de functie weerspiegeld, zoals u in de uitvoer kunt zien.
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)> |
>
>
Uitvoer
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Wat is Pass-by-waarde in Python?
Bij deze aanpak geven we een kopie door van de werkelijke variabelen in de functie als parameter. Daarom zal elke wijziging van parameters binnen de functie niet worden weerspiegeld in de werkelijke variabele.

Hetzelfde geldt voor elke bewerking die door de functie op de variabele of het object wordt uitgevoerd

Samenvattend zijn de kopieën van de variabelen en de objecten in de context van de aanroeper van de functie volledig geïsoleerd.
Geef waarde door in het Python-voorbeeld
Hier zullen we het gehele getal x doorgeven aan de functie die een onveranderlijk gegevenstype is. Vervolgens werken we de waarde van het gehele getal in de functie bij en drukken we de bijgewerkte waarde af. De wijzigingen worden buiten de functie niet gezien, aangezien gehele getallen onveranderlijke gegevenstypen zijn.
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)> |
>
>
Uitgang:
Before function call: 5 Inside function: 15 After function call: 5>
Python-programmering maakt gebruik van het pass-by-referentieobjectconcept terwijl waarden aan de functies worden doorgegeven. Dit artikel probeert u het concept van 'pass by value' en 'pass by reference' in Python te laten zien. We hebben verschillende gevallen van het doorgeven van waarden laten zien met voorbeelden. Het doorgeven van waarden aan een functie in Python verschilt van andere codeertalen, maar met deze tutorial kunt u het concept gemakkelijk begrijpen en in uw werk implementeren.
Lees ook:
Is Python call by reference of call by value