[PYTHON] Machen Sie den Standardwert des Arguments unveränderlich (Artikelerklärung)

Ich werde diesen Artikel erklären, damit Sie ihn verstehen können. Bitte vergib mir, obwohl ich den gleichen Inhalt schreiben werde. https://qiita.com/yuku_t/items/fd517a4c3d13f6f3de40

Sie können Standardwerte für Argumente in Funktionsdefinitionen und in der Klasse init festlegen. Wenn zu diesem Zeitpunkt der Typ des Arguments, für das der Anfangswert angegeben wurde, ein veränderbarer Typ ist, ist er möglicherweise nicht gut.

Funktion mit Anfangswert(Schlechtes Beispiel).py


def foo(bar=[]): #Der Listentyp ist veränderlich, seien Sie vorsichtig!
    bar.append('baz')
    print(bar)

Wenn Sie dies mit den Standardwerten tun

Lauf.py


>>> foo()
['baz']
>>> foo()
['baz', 'baz'] #Das?

Das Ergebnis hat sich geändert. Der Grund dafür ist, dass in Python dem Standardwert einer Funktion Speicher zugewiesen wird, wenn die Funktion definiert wird. Oben sind zwei "baz" enthalten, da der Append-Vorgang zweimal für den Listentyp ausgeführt wurde, der bei der Definition der Funktion erstellt wurde.

Um dieses Problem zu beheben Mit anderen Worten, wenn Sie einem veränderlichen Typargument problemlos einen Anfangswert geben möchten, können Sie beim Aufrufen der Funktion Speicher zuweisen, nicht beim Definieren der Funktion. Das heißt, die Initialisierung wird innerhalb der Funktion durchgeführt.

Funktion mit Anfangswert(Gutes Beispiel).py


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

Es ist in Ordnung, dem unveränderlichen Typargument einen Anfangswert zu geben. Referenz: https://qiita.com/makotoo2/items/fc3a617882916f9775f5

Recommended Posts

Machen Sie den Standardwert des Arguments unveränderlich (Artikelerklärung)
Machen Sie den Standardwert des Arguments unveränderlich
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
Machen Sie den SIP-Server so kurz wie möglich (in der Mitte der Erklärung).
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Erstellen Sie die standardmäßige interaktive Shell IPython
Über den Rückgabewert des Histogramms.
Ergänzung zur Erklärung von vscode
Ich persönlich habe den Erklärungsartikel des Abschnitts DP (Daruma drop) gekaut.
Die Geschichte einer unveränderlichen Form
Ermitteln Sie den Wert der mittleren Schicht von NN
Achten Sie auf den Rückgabewert von __len__
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?
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]