Heim > Artikel > Backend-Entwicklung > Warum werden in Python Standardwerte von Objekten gemeinsam genutzt?
Das Konzept der Standardwerte in Python basiert auf der Verwendung veränderlicher oder unveränderlicher Objekte. In der Programmierpraxis ist es am besten, keine veränderlichen Objekte als Standardwerte zu verwenden. Verwenden Sie stattdessen None als Standardwert, um Probleme zu vermeiden. Unveränderliche Objekte wie Zahlen, Zeichenfolgen, Tupel und None ändern sich nicht. Bei veränderlichen Objekten wie Wörterbüchern, Listen und Klasseninstanzen können Änderungen zu Verwirrung führen.
Schauen wir uns ein Beispiel für ein Wörterbuch in einer Funktion an und zeigen, was daran falsch ist und wie man es beheben kann.
Wir haben eine Funktion. In dieser Funktion haben wir ein Wörterbuch als Parameter und legen den Standardwert fest. Beim ersten Aufruf dieser Funktion enthält mydict nur ein Element. Beim zweiten Aufruf enthält mydict zwei Elemente, da mydict zu Beginn der Ausführung von foo() bereits über ein Element verfügte.
def foo(mydict={}): ... calculate... mydict[key] = value return mydict
Wir erwarten oft, dass Funktionsaufrufe neue Objekte mit Standardwerten erstellen. Dies ist jedoch nicht der Fall. Standardwerte werden nur einmal erstellt, wenn die Funktion definiert wird. Wenn das Objekt geändert wird, wie im Wörterbuchbeispiel oben, verweisen nachfolgende Aufrufe der Funktion auf das geänderte Objekt.
Um das Problem der Verwendung veränderlicher Objekte als Standardwerte zu lösen, gehen Sie wie folgt vor -
def foo(mydict={}): ...
Verwenden Sie unveränderliche Objekte wie None -
def foo(mydict=None): if mydict is None: mydict = {}
Wenn Sie eine Funktion haben, die rechenintensiv ist, besteht eine Technik darin, die Argument- und Ergebniswerte für jeden Aufruf der Funktion zwischenzuspeichern und die zwischengespeicherten Werte zurückzugeben, wenn dieselben Werte erneut angefordert werden.
Das nennt man Auswendiglernen und kann so erreicht werden -
# Callers can only provide two parameters and optionally pass _cache by keyword def expensive(arg1, arg2, *, _cache={}): if (arg1, arg2) in _cache: return _cache[(arg1, arg2)] # Calculate result = ... expensive computation ... _cache[(arg1, arg2)] = result return result
Im Folgenden werden die Ergebnisse im Cache gespeichert −
_cache[(arg1, arg2)] = result
Das obige ist der detaillierte Inhalt vonWarum werden in Python Standardwerte von Objekten gemeinsam genutzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!