Aufruf von Python-Funktionen per Referenz (Duplikat)
In vielen Programmiersprachen können Parameter als Wert oder als Referenz unter Verwendung bestimmter reservierter Wörter übergeben werden . Wenn in Python jedoch ein Parameter an eine Funktion übergeben wird, ändert er niemals den Wert der ursprünglichen Variablen in der aufrufenden Funktion.
Beispiel 1: Aufruf nach Wert
k = 2
def foo(n):
n *= n
return n
j = foo(k)
print(j) # 4
print(k) # 2
Hier bleibt der Wert von k nach dem Aufruf der foo-Funktion unverändert, da Python Argumente nach Wert übergibt.
Beispiel 2: Aufruf durch Global
Um die Variable in der aufrufenden Funktion zu ändern, kann das globale Schlüsselwort verwendet werden.
n = 0
def foo():
global n
n *= n
return n
In diesem Fall ermöglicht das globale Schlüsselwort die Änderung von n innerhalb der foo-Funktion und sein Wert wird in der aufrufenden Funktion aktualisiert.
Übergabe durch Objektreferenz in Python
Python folgt jedoch nicht strikt Call-by-Value oder Call-by-Reference. Stattdessen wird ein Konzept namens „Übergabe durch Objektreferenz“ verwendet.
In Python beziehen sich Variablen auf Objekte, nicht auf die Objekte selbst. Wenn eine Variable an eine Funktion übergeben wird, übergibt sie daher einen Verweis auf das Objekt, nicht auf das Objekt selbst.
Zum Beispiel:
def append_one(li):
li.append(1)
x = [0]
append_one(x)
print(x) # [0, 1]
In diesem Code hängt die Funktion append_one 1 an die Liste x an. Da die Liste per Objektreferenz übergeben wird, werden alle an der Liste innerhalb der Funktion vorgenommenen Änderungen in der aufrufenden Funktion widergespiegelt.
Übergabe per Referenz vs. Übergabe per Objektreferenz
Zusammenfassend folgt Python der Übergabe durch Objektreferenz, auf die Variablen verweisen Objekte und nicht die Objekte selbst. Dadurch können Funktionen an sie übergebene Objekte ändern, Änderungen an den Variablenreferenzen selbst werden jedoch nicht an die aufrufende Funktion zurückgegeben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3