Heim > Backend-Entwicklung > Python-Tutorial > Warum werden in Python Standardwerte von Objekten gemeinsam genutzt?

Warum werden in Python Standardwerte von Objekten gemeinsam genutzt?

王林
Freigeben: 2023-08-20 19:33:23
nach vorne
1133 Leute haben es durchsucht

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.

Frage

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
Nach dem Login kopieren

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.

Lösung

Um das Problem der Verwendung veränderlicher Objekte als Standardwerte zu lösen, gehen Sie wie folgt vor -

def foo(mydict={}):
   ...
Nach dem Login kopieren

Verwenden Sie unveränderliche Objekte wie None -

def foo(mydict=None):
   if mydict is None:
      mydict = {}
Nach dem Login kopieren

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
Nach dem Login kopieren

Im Folgenden werden die Ergebnisse im Cache gespeichert −

_cache[(arg1, arg2)] = result
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage