ProgrammierungBackend Entwickler

Wie funktioniert das Prinzip der Standardargumente in Python-Funktionen? Warum kann die Verwendung von veränderlichen Objekten (z.B. Listen) als Standardwerte zu unerwarteten Ergebnissen führen? Geben Sie ein detailliertes Beispiel.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

In Python werden Standardargumente nur einmal berechnet – beim Definieren der Funktion, und nicht bei jedem Aufruf. Das bedeutet, dass wenn ein veränderliches Objekt (z.B. eine Liste oder ein Dictionary) als Standardwert für einen Parameter verwendet wird, es für alle Aufrufe der Funktion, bei denen dieses Argument nicht explizit angegeben wird, gemeinsam ist.

Beispiel:

def append_item(item, items=[]): items.append(item) return items print(append_item(1)) # [1] print(append_item(2)) # [1, 2], erwartet wäre [2]

Der richtige Weg:

def append_item(item, items=None): if items is None: items = [] items.append(item) return items

Jetzt erhält jeder Aufruf seine eigene Liste.

Trickfrage.

Frage: Was passiert, wenn die Funktion mehrmals mit einem veränderlichen Objekt als Standardwert aufgerufen wird?

Antwort: Dasselbe Objekt wird bei jedem Aufruf geändert. Das obige Beispiel veranschaulicht dies – die Liste speichert alle Werte.

Beispiele realer Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


Geschichte In einer großen Webanwendung wurde bei der Zwischenspeicherung von Daten eine Funktion mit einem Standardparameter-Dictionary verwendet. Dies führte dazu, dass die Daten zwischen verschiedenen Benutzern "durchsickerten": Jemand änderte sein Profil – und diese Änderungen wurden manchmal einem anderen Benutzer aufgrund des gemeinsamen Zustands des globalen Dictionaries angezeigt.


Geschichte In Tests wurde eine Funktion mit einer veränderlichen Standardliste zur Sammlung von Statistiken verwendet. Daten eines Tests "flossen" in einen anderen, was zu unerwarteten Abstürzen, der Unmöglichkeit, einen Fehler zu reproduzieren, und schwieriger Fehlersuche führte.


Geschichte In einem Mikrodienst zur Aggregation von Logs wurde eine Ereignissammlung mit Hilfe einer Funktion durchgeführt, bei der das Standardargument eine Liste war. Logs wurden dupliziert – vorübergehende Ansammlungen aus alten Anfragen kamen zu neuen Kunden, was Stunden an Ermittlungen und Datenverlust kostete.