Geben Sie kein veränderbares Objekt (Listentyp, Wörterbuchtyp usw.) als Anfangswert des Funktionsarguments von Python an.

Hintergrund

Wie der Titel schon sagt, werde ich den Grund erklären.

Inhalt

Phänomen

Ich habe die folgende Funktion gemacht. Auf den ersten Blick habe ich das Gefühl, dass jedes Problem im Inhalt liegt.


def A_fnc (b=dict()):
   b["xxx"]=12
   return b

#Ich werde es so benutzen
aa=A_fnc()
bb=A_fnc()

aa["yyy"]=11

print(aa)
print(bb)

Aus irgendeinem Grund ... Die Ausgabe ist wie folgt.

{'xxx': 12, 'yyy': 11}
{'xxx': 12, 'yyy': 11}

Beide haben den gleichen Inhalt.

Ursache

Hinweis: Warum werden Standardwerte von Objekten gemeinsam genutzt? https://docs.python.org/ja/3/faq/programming.html#id14

Es ist leicht zu erwarten, dass ein Funktionsaufruf ein neues Objekt für den Standardwert erstellt. Eigentlich ist das nicht der Fall. Der Standardwert wird nur einmal generiert, wenn die Funktion definiert ist. Wie im Wörterbuch in diesem Beispiel beziehen sich nachfolgende Funktionsaufrufe beim Ändern dieses Objekts auf das geänderte Objekt.

Lösung

Vorläufig habe ich Folgendes getan.


def A_fnc(b=False):
   if(not b):b=dict()
   b["xxx"]=12
   return b

aa=A_fnc()
bb=A_fnc()

aa["yyy"]=11

print(aa)
print(bb)
#{'xxx': 12, 'yyy': 11}
#{'xxx': 12}

Dies ist vorerst die Lösung

Referenz

Herr @ Shiracamus wies darauf hin. Vielen Dank.

Recommended Posts

Geben Sie kein veränderbares Objekt (Listentyp, Wörterbuchtyp usw.) als Anfangswert des Funktionsarguments von Python an.
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
[Python] Wert des Funktionsobjekts (?)
[Python] Verwenden Sie Daten im JSON-Format als Objekt vom Typ Wörterbuch
Extrahieren Sie den Wert von dict oder list als Zeichenfolge
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
[Python] [Meta] Ist der Python-Typ ein Typ?
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Hinweis: Bedeutung der Angabe von nur * (Sternchen) als Argument in der Funktionsdefinition von Python
Kündigen Sie die Wettervorhersage (Regen usw.) von DM als Teil der Funktion des Bots an
Nehmen Sie eine Instanz einer Python-Ausnahmeklasse nicht direkt als Argument für die Ausnahmeklasse!
[Python of Hikari-] Kapitel 06-02 Funktion (Argument und Rückgabewert 1)
Geben Sie in Python einen Unterbefehl als Befehlszeilenargument an
[Python] Berechnen Sie den Durchschnittswert des Pixelwerts RGB des Objekts
Zusammenfassung der Python-Sortierung (Liste, Wörterbuchtyp, Serie, DataFrame)
Python: Ruft eine Liste der Methoden für ein Objekt ab
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
[Python] Typ Fehler: 'in <string>' erfordert einen String als linken Operanden, nicht als Liste
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
26.11.2015 Python> Funktionsliste des Moduls anzeigen> Mathematik importieren> Verzeichnis (Mathematik)
Extrahieren Sie den Wert, der einem Wert am nächsten kommt, aus einem Listenelement in Python
Python> Standardargument initialisiert kein veränderliches Objekt (z. B. Liste) /, da es bei der Definition initialisiert wird
Suchthinweis: max (max (Liste)) darf nicht verwendet werden, wenn der Wert eines zweidimensionalen Arrays maximiert wird
Beim Inkrementieren des Werts eines Schlüssels, der nicht vorhanden ist
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
Format, wenn eine lange Zeichenfolge als Python-Argument übergeben wird
[Python] Ausführungszeit, wenn eine Funktion in einen Wörterbuchwert eingegeben wird
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Verwendung von Lambda (beim Übergeben einer Funktion als Argument einer anderen Funktion)
Python Hinweis: Map - Machen Sie dasselbe für jedes Element der Liste
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 1)
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
[Python] Ein Programm, das den Inhalt der Liste nach links dreht