Entwickler, die von anderen Sprachen wie C++ und Java in die Python-Programmierung einsteigen, sind oft verwirrt durch den Prozess der Argumentübergabe in Python. Das objektzentrierte Datenmodell und seine Zuordnungsbehandlung sind die Ursachen für die Verwirrung auf grundlegender Ebene.
In dem Artikel werden wir das Konzept von diskutieren wie man in Python einen Wert als Referenz übergibt Und Versuchen Sie, Pass-by-Reference-Beispiele zu verstehen in Python.
Inhaltsverzeichnis
- Wertübergabe und Referenzübergabe in Python
- Die Variable ist nicht das Objekt
- Was ist Pass-by-Reference in Python?
- Was ist Wertübergabe in Python?
Wertübergabe und Referenzübergabe in Python
Möglicherweise möchten Sie nach dem Lesen etwas schlagen, also machen Sie sich bereit. Pythons Argumentübergabemodell ist Weder „Pass by Value“ noch „Pass by Reference“, sondern „Pass by Object Reference“.
Linkedlist Java
Abhängig von der Art des Objekts, das Sie in der Funktion übergeben, verhält sich die Funktion unterschiedlich. Bei unveränderlichen Objekten wird die Wertübergabe angezeigt, bei veränderlichen Objekten die Referenzübergabe.
Sie können den Unterschied zwischen Pass-by-Value und Pass-by-Reference im folgenden Beispiel überprüfen:
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)> |
>
>
Gewerkschaft vs. Gewerkschaft alle
Ausgabe
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']>
Im obigen Code haben wir gezeigt, wie Python in seinem Programm das Call-by-Reference-Objektkonzept verwendet.
Wir übergeben eine Ganzzahl in der Funktion call_by_value(). Ganzzahlen sind unveränderliche Objekte, daher arbeitet Python nach dem Call-by-Value-Prinzip und die in der Funktion vorgenommenen Änderungen werden nicht außerhalb der Funktion widergespiegelt.
Anschließend übergeben wir die Liste per Referenz an die Funktion. In der Funktion call_by_reference() übergeben wir eine Liste, die ein veränderbares Objekt ist. Python arbeitet in dieser Funktion nach Call-by-Reference und die innerhalb der Funktion vorgenommenen Änderungen sind auch außerhalb der Funktion sichtbar.
Die Variable ist nicht das Objekt
Hier ist a eine Variable, die auf eine Liste zeigt, die die Elemente X und Y enthält. Aber a selbst ist keine Liste. Betrachten Sie a als einen Bucket, der die Objekte X und Y enthält.
a = ['X', 'Y']>

Was ist Pass-by-Reference in Python?
Übergabe als Referenz bedeutet, dass Sie die Funktion (Referenz) an eine Variable übergeben müssen, was bedeutet, dass die Variable bereits im Speicher vorhanden ist.
Hier wird die Variable (der Bucket) direkt an die Funktion übergeben. Die Variable fungiert als Paket, das seinen Inhalt (die Objekte) enthält.

Im obigen Codebild sind sowohl list als auch my_list dieselbe Containervariable und verweisen daher auf dasselbe Objekt im Speicher. Jede von der Funktion an der Variablen oder dem Objekt ausgeführte Operation wird direkt vom Funktionsaufrufer widergespiegelt. Beispielsweise könnte die Funktion den Inhalt der Variablen vollständig ändern und sie auf ein völlig anderes Objekt verweisen:

Außerdem kann die Funktion den Inhalt der Variablen mit dem gleichen Effekt wie unten neu zuweisen:

Zusammenfassend lässt sich sagen, dass die Funktion und der Aufrufer bei der Referenzübergabe dieselbe Variable und dasselbe Objekt verwenden.
Referenzübergabe im Python-Beispiel
In diesem Beispiel übernimmt die Funktion „modify_list“ eine Liste als Referenz. Die Funktion fügt die Zeichenfolge Geeks zur übergebenen Liste innerhalb der Funktion hinzu und gibt sie aus. Da es sich bei Listen um veränderliche Datentypen handelt, werden die an der Liste innerhalb der Funktion vorgenommenen Änderungen auch außerhalb der Funktion widergespiegelt, wie Sie in der Ausgabe sehen können.
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)> |
>
MySQL-Anzahl
>
Ausgabe
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Was ist Wertübergabe in Python?
Bei diesem Ansatz übergeben wir eine Kopie von Die tatsächliche Variablen in der Funktion als Parameter. Daher wirken sich Änderungen an Parametern innerhalb der Funktion nicht auf die tatsächliche Variable aus.

Das Gleiche gilt für alle Operationen, die die Funktion an der Variablen oder dem Objekt ausführt

Zusammenfassend lässt sich sagen, dass die Kopien der Variablen und Objekte im Kontext des Aufrufers der Funktion vollständig isoliert sind.
dritte Normalform
Wertübergabe in Python-Beispiel
Hier übergeben wir die Ganzzahl x an die Funktion, die ein unveränderlicher Datentyp ist. Anschließend aktualisieren wir den Wert der Ganzzahl innerhalb der Funktion und geben den aktualisierten Wert aus. Die Änderungen sind außerhalb der Funktion nicht sichtbar, da Ganzzahlen unveränderliche Datentypen sind.
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)> |
>
>
Ausgabe:
Before function call: 5 Inside function: 15 After function call: 5>
Die Python-Programmierung verwendet das Konzept der Übergabe von Referenzobjekten bei der Übergabe von Werten an die Funktionen. In diesem Artikel wird versucht, Ihnen das Konzept der Wertübergabe und Referenzübergabe in Python zu zeigen. Wir haben verschiedene Fälle der Werteübergabe anhand von Beispielen gezeigt. Die Übergabe von Werten an eine Funktion in Python unterscheidet sich von anderen Programmiersprachen, aber mit diesem Tutorial können Sie das Konzept leicht verstehen und in Ihrer Arbeit implementieren.
Lesen Sie auch:
Ist Python Call-by-Reference oder Call-by-Value