Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich unerwartetes Verhalten mit veränderbaren Standardparametern in Python verhindern?

Wie kann ich unerwartetes Verhalten mit veränderbaren Standardparametern in Python verhindern?

Linda Hamilton
Freigeben: 2024-12-16 09:57:18
Original
666 Leute haben es durchsucht

How Can I Prevent Unexpected Behavior with Mutable Default Parameters in Python?

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

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

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

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!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage