Dinge, auf die Sie achten müssen, wenn Sie Standardargumente in Python verwenden

Einführung

Ich habe Python noch nicht verwendet. Ich war ein wenig süchtig danach, ohne die Spezifikationen der Standardargumente zu kennen.

Der durch das Standardargument angegebene Wert wird zwischengespeichert

Tatsächlich ist der im Standardargument angegebene Wert ** zwischengespeichert **. Wenn Sie also ** veränderbare Daten ** wie eine Liste oder ein Wörterbuch als Standardargument verwenden, ohne dies zu wissen, erhalten Sie unbeabsichtigtes Verhalten.

#a ist das Standardargument
def hoge(a=[]):
  a.append('a')
  print(a)

hoge() # ['a']
hoge() # ['a', 'a'] ※['a']ist nicht

Wenn Sie dies oben tun, führt der zweite Aufruf von hoge () zu ['a', 'a'] anstelle von a = ['a']. Dies liegt daran, dass ['a'] nach dem ersten Aufruf wiederverwendet wird.

Lösung

Verwenden Sie ** unveränderliche ** Werte wie Keine, Zahlen, Zeichenfolgen und Taples als Standardargumente.

Wenn Sie wirklich eine Liste oder ein Wörterbuch als Standardargument verwenden möchten, verwenden Sie die folgende Methode.

def hoge(a=None):
  if a is None:
    a = []
  a.append('a')
  print(a)

hoge() # ['a']
hoge() # ['a']

Recommended Posts

Dinge, auf die Sie achten müssen, wenn Sie Standardargumente in Python verwenden
Dinge, die Sie beim Benennen des dynamischen Routings in nuxt.js beachten sollten
Dinge, auf die Sie beim Erstellen einer Python-Umgebung auf einem Mac achten sollten
Dinge, die Sie bei der Migration mit Django beachten sollten
Dinge, die Sie bei der Verwendung von Python beachten sollten, wenn Sie MATLAB verwenden
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Dinge, die Sie bei der Entwicklung von Crawlern in Python beachten sollten
Verwendung mehrerer Argumente bei der Parallelverarbeitung mithilfe der Mehrfachverarbeitung in Python
Dinge, die Sie beim Kopieren von Python-Listen beachten sollten
Beachten Sie beim Initialisieren einer Liste in Python
Beenden bei Verwendung von Python in Terminal (Mac)
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python2 beachten sollten
Dinge, die Sie bei der Verarbeitung von Zeichenfolgen in Python 3 beachten sollten
Beachten Sie Folgendes, wenn Sie automatisierte Tools für die Werkstatt in Python erstellen
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Bei Verwendung regulärer Ausdrücke in Python
Effektiver Python-Hinweis Punkt 17 Respektieren Sie die Sicherheit, wenn Sie Iteratoren für Argumente verwenden
So setzen Sie die Standardcodierung in Python auf utf-8
[Python, Multiprocessing] Verhalten für Ausnahmen bei Verwendung von Multiprocessing
25.03.2015 Python> Mehrzeiliger Kommentar> Achten Sie auf Einrückungen
Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
Melden Sie sich mit Anforderungen in Python bei Slack an
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
So empfangen Sie Befehlszeilenargumente in Python
Registrieren Sie Funktionsargumente automatisch in argparse in Python
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Fehler beim Versuch, psycopg2 in Python zu installieren
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Ein Tool zum Erstellen von Maskenbildern für ETC in Python
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Verzeichnisstruktur für die testgetriebene Entwicklung mit pytest in python
[AWS IoT] Registrieren Sie Dinge in AWS IoT mithilfe des AWS IoT Python SDK
So führen Sie Python im virtuellen Raum aus (für MacOS)
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Fehler aufgrund eines Konflikts zwischen Pythons bei der Verwendung von Gurobi
Setzen Sie die Schlüsselwortargumente des Konstruktors auf die Scheinattribute in Python
Code-Änderungsort bei kostenloser Verwendung von Plotly
Artikel, die angezeigt werden, wenn die Installation für Python + OpenCV fehlschlägt
So rufen Sie mehrere Arrays mit Slice in Python ab.
Wenn Sie in der for-Anweisung plt.save möchten
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
Achten Sie auf Randint
Wovon ich süchtig war, als ich Python Tornado benutzte
Wann werden die Standardargumente in Python gebunden? Wenn die Variable im Abschluss gebunden ist, wird die Auswertung verschoben.
Ich möchte am Ende etwas mit Python machen
Ich kenne? Datenanalyse mit Python oder Dingen, die Sie mit numpy verwenden möchten, wenn Sie möchten
[Für Anfänger von Wettkampfprofis] Drei Eingabemethoden, die Sie beim Starten der Wettkampfprogrammierung mit Python beachten sollten
So ermitteln Sie die kumulative Summe für jede Gruppe mithilfe von DataFrame in Spark [Python-Version]
Versuchen Sie es mit GUI, PyQt in Python
Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Ein Hinweis beim Erstellen eines gerichteten Diagramms mit Graphviz in Python
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Tipps zum Codieren kurz und einfach in Python zu lesen
Festlegen der Cache-Steuerung für den BLOB-Speicher in Azure Storage in Python
Nützliche Tricks in Bezug auf Listen und Anweisungen in Python