Standardparameter verwalten, um unbeabsichtigte Mutationen zu vermeiden
In Python können Standardparameter manchmal zu unerwartetem Verhalten führen, wenn es sich um veränderbare Objekte handelt. Wenn Sie beispielsweise eine leere Liste als Standardparameter einer Funktion verwenden, kann dies dazu führen, dass sich die Liste alte Daten „merkt“, die ihr in früheren Aufrufen hinzugefügt wurden.
Betrachten Sie die folgende Funktion:
def my_func(working_list=[]): working_list.append("a") print(working_list)
Beim ersten Aufruf wird die Standardliste erstellt und „a“ angehängt. Nachfolgende Aufrufe der Funktion aktualisieren jedoch weiterhin dieselbe Liste, was zu unbeabsichtigtem Verhalten führt. Um dieses Problem zu beheben, müssen wir sicherstellen, dass bei jedem Aufruf der Funktion eine neue leere Liste verwendet wird.
Ein Ansatz besteht darin, den Standardparameter explizit auf „None“ zu setzen und innerhalb der Funktion darauf zu prüfen:
def my_func(working_list=None): if working_list is None: working_list = [] # alternative syntax: # working_list = [] if working_list is None else working_list working_list.append("a") print(working_list)
Diese Methode stellt sicher, dass beim Aufruf der Funktion ohne explizites Argument eine neue leere Liste erstellt wird.
Alternativ können Sie eine Comprehension zum Erstellen der Liste verwenden und weisen Sie ihn dem Standardparameter zu:
def my_func(working_list=[[]]): working_list[0].append("a") print(working_list)
Dieser Ansatz generiert bei jedem Aufruf effektiv eine neue leere Liste.
In der Python-Dokumentation wird empfohlen, None als Standardparameter zu verwenden und darauf zu prüfen ausdrücklich. Vergleiche mit „Keine“ sollten gemäß den PEP 8-Richtlinien mit den Operatoren „ist“ oder „ist nicht“ durchgeführt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich unerwartetes Verhalten mit veränderbaren Standardparametern in Python verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!