Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich unerwartetes Verhalten mit veränderlichen Standardargumenten in Python vermeiden?

Wie kann ich unerwartetes Verhalten mit veränderlichen Standardargumenten in Python vermeiden?

DDD
Freigeben: 2024-12-10 15:03:10
Original
669 Leute haben es durchsucht

How Can I Avoid Unexpected Behavior with Mutable Default Arguments in Python?

Fehler bei Standardparametern in der frühen Bindung von Python vermeiden

Bei der Verwendung von Standardparametern in Python ist es wichtig, sich der frühen Bindung bewusst zu sein Verhalten, das zu unerwarteten Ergebnissen führen kann, insbesondere bei veränderlichen Standardargumenten. Dieser Artikel befasst sich mit diesem Problem und bietet eine Lösung zum Erstellen einer Funktion, die konsistent eine neue leere Liste als Standardparameter verwendet.

Das Problem

Bedenken Sie Folgendes Funktion:

def my_func(working_list=[]):
    working_list.append("a")
    print(working_list)
Nach dem Login kopieren

Wenn diese Funktion zum ersten Mal ohne explizites Argument aufgerufen wird, erstellt Python eine neue leere Liste als Standardwert für Arbeitsliste. Nachfolgende Aufrufe ohne explizites Argument verwenden jedoch dieselbe Liste, die beim ersten Aufruf erstellt wurde, was zu kumulativen Aktualisierungen der Liste führt.

Die Lösung

An Um dieses Verhalten zu vermeiden, besteht die empfohlene Vorgehensweise darin, None als Standardparameter zu verwenden und dies explizit im Funktionskörper zu testen. Dies kann wie folgt erreicht werden:

def my_func(working_list=None):
    if working_list is None: 
        working_list = []

    # alternative:
    # working_list = [] if working_list is None else working_list

    working_list.append("a")
    print(working_list)
Nach dem Login kopieren

Indem Sie den Standardparameter auf „None“ setzen, wird bei jedem Aufruf der Funktion ohne explizites Argument eine neue leere Liste erstellt.

< h3>Zusätzliche Überlegungen

Die Python-Dokumentation empfiehlt die Verwendung von „None“ für Vergleiche mit „None“. Dies ist der bevorzugte Stil gemäß PEP 8, der davon abrät, Gleichheitsoperatoren (== und !=) für Vergleiche mit Singletons wie None zu verwenden.

Das obige ist der detaillierte Inhalt vonWie kann ich unerwartetes Verhalten mit veränderlichen Standardargumenten in Python vermeiden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage