[PYTHON] Machen Sie den Standardwert des Arguments unveränderlich

Sie können den Standardwert des Arguments in der Funktionsdefinition festlegen

def foo(bar=[]):
    bar.append('baz')
    return bar

Wenn Sie "foo ()" ausführen, wird die Liste "['baz']" zurückgegeben

>>> foo()
['baz']

Was ist nun, wenn wir denselben Code erneut ausführen?

>>> foo()
['baz', 'baz']

Das Ergebnis hat sich geändert. Der Grund dafür ist, dass Python den Standardwert einer Funktion nur beim ersten Mal auswertet. Die Python-Liste ist veränderlich, und append () fügt der Liste destruktive Argumente hinzu, was beim zweiten Durchlauf zu unerwarteten Ergebnissen führt. ..

Um dieses Problem zu beheben, machen Sie ein unveränderliches Objekt zum Standard. Diesmal bei der Funktion "foo"

def foo(bar=None):
    if bar is None:
        bar = []
    bar.append('baz')
    return bar

Machen. Unabhängig davon, wie oft diese Funktion ohne Argumente aufgerufen wird, ist None unveränderlich und gibt jedes Mal das gleiche Ergebnis zurück.

>>> foo()
['baz']
>>> foo()
['baz']

In Python ist str unveränderlich, daher ist die Verwendung eines Strings als Standardwert in Ordnung.

Recommended Posts

Machen Sie den Standardwert des Arguments unveränderlich
Machen Sie den Standardwert des Arguments unveränderlich (Artikelerklärung)
Der Zeitpunkt, zu dem der Wert des Standardarguments ausgewertet wird, unterscheidet sich zwischen Ruby und Python.
Code, der bei AttributeError Standardwerte festlegt
Finden Sie die Definition des Wertes von errno
Über den Rückgabewert von pthread_mutex_init ()
Erstellen Sie die standardmäßige interaktive Shell IPython
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Die Geschichte einer unveränderlichen Form
Ermitteln Sie den Wert der mittleren Schicht von NN
Achten Sie auf den Rückgabewert von __len__
Kopieren Sie die Liste in Python
Der Wert von pyTorch torch.var () wird nicht verteilt
Versuchen Sie, die Daimyo-Matrix durch einen Singularwert zu zerlegen
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Korrigieren Sie die Argumente der in map verwendeten Funktion
Suchen Sie nach dem Wert der Instanz in der Liste
Machen Sie den Fortschritt von dd in der Fortschrittsanzeige sichtbar
Gibt es keinen Standardwert im Wörterbuch?
[Python of Hikari-] Kapitel 06-02 Funktion (Argument und Rückgabewert 1)
[Python] Berechnen Sie den Durchschnittswert des Pixelwerts RGB des Objekts
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
[C-Sprache] [Linux] Ruft den Wert der Umgebungsvariablen ab
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
[Golang] Geben Sie ein Array für den Wert der Karte an
Ich habe das Argument class_weight von Chainers Funktion softmax_cross_entropy untersucht.
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
[Django] Ändern Sie die Standard-IP-Adresse des Befehls runserver
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
Warum ist das erste Argument der [Python] -Klasse selbst?
Die Kopiermethode von pandas.DataFrame ist standardmäßig Deep Copy
Der Beginn von cif2cell
Python-Standardargumentfalle
Machen Sie das Werkzeug einfach
Die Bedeutung des Selbst
Python-Standardargumentverhalten
der Zen von Python
Die Geschichte von sys.path.append ()
Rache der Typen: Rache der Typen
Ändern Sie den Einstellungswert von settings.py entsprechend der Entwicklungsumgebung
Hinweis zum Standardverhalten von collate_fn in PyTorch
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Lassen Sie uns die Analyse der sinkenden Daten der Titanic so durchführen
Erben Sie die Standardbibliothek, um den Durchschnittswert der Warteschlange zu ermitteln
Ihre URL hat nicht mit dem Wert des Challenge-Parameters geantwortet.
Suchen Sie den Index des Maximalwerts (Minimalwerts) eines mehrdimensionalen Arrays
Rufen Sie den Wert ab, während Sie den Standardwert aus dict in Python angeben
Was ist die Standard-TLS-Version des Python-Anforderungsmoduls?
Extrahieren Sie den Wert von dict oder list als Zeichenfolge
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten