Ich legte leere Klammern als Standardwert für ein optionales Argument zu einer Python-Funktion, und pylint (mit Sublime-Paket) sagte mir, es sei gefährlich. Kann jemand erklären, warum das so ist? Und ist eine bessere Alternative, stattdessen None zu verwenden?Warum ist das leere Wörterbuch in Python ein gefährlicher Standardwert?
Antwort
Es ist nur gefährlich, wenn Ihre Funktion das Argument ändert. Wenn Sie ein Standardargument ändern, bleibt es bis zum nächsten Aufruf erhalten, sodass Ihr "leeres" Dict anfängt, Werte für andere als die ersten Aufrufe zu enthalten.
Ja, mit None
ist in solchen Fällen sowohl sicher als auch konventionell.
Wenn die Funktion das Argument nicht ändert, sollten wir im Namen der Best Practice immer noch None als Standard verwenden? – NightFurry
@NightFurry: Ich zögere, hier etwas zu verschreiben - 'None' ist oft die beste Wahl, aber vielleicht nicht 100% der Zeit. Benutze dein Urteil, aber wenn du dich nicht entscheiden kannst, ist 'None' eine sichere Sache. –
Blick Lassen Sie uns ein Beispiel:
def f(value, key, hash={}):
hash[value] = key
return hash
print f('a', 1)
print f('b', 2)
die Sie wahrscheinlich zu Ausgang erwarten:
{'a': 1}
{'b': 2}
Aber tatsächlich gibt:
{'a': 1}
{'a': 1, 'b': 2}
danke mann! Ich habe den Grund nicht bekommen :) – maxadamo
- 1. Python: Problem mit Standardwert Wörterbuch get-Methode
- 2. Python-Wörterbuch, das standardmäßig Schlüssel ist?
- 3. Python: Eine elegante Weise, leere Listen von Python-Wörterbuch
- 4. Leere Klassengröße in Python
- 5. Warum ist das gültige Python?
- 6. Warum slice [: -0] leere Liste in Python
- 7. Python Update-Wörterbuch in Wörterbuch
- 8. Ist ein Python-Wörterbuch ein Beispiel für eine Hash-Tabelle?
- 9. JSLint das Markieren von "gefährlicher Kommentar"
- 10. Standardwert für Wörterbuch in jinja2 (ansible)
- 11. wie ein Wörterbuch in einem Wörterbuch in Python zu sortieren
- 12. Leere Zeichenfolge Standardwert in Entity Framework Designer
- 13. Warum ist das in Python nicht möglich?
- 14. "Ein potentiell gefährlicher Request.Form-Wert .." Fehler, wenn ModelState.IsValid falsch ist
- 15. Ist es möglich, ein Python-Wörterbuch in AMQP zu legen?
- 16. Warum ist mein Wörterbuch in einer Liste?
- 17. Warum ist das ein Speicherleck
- 18. Warum ist das ein Speicherleck?
- 19. Warum ist das .NET-Wörterbuch <TKey, TValue> unveränderlich?
- 20. Python "extend" für ein Wörterbuch
- 21. Warum ist das ein Zeiger
- 22. Warum ist das ein Wert?
- 23. Ersatzteil ein Wörterbuch in Python mit
- 24. Sortieren Sie ein verschachteltes Wörterbuch in Python
- 25. Wie ein Wörterbuch in Python verspotten
- 26. Warum bestellt Python mein Wörterbuch so?
- 27. Python Druck Wörterbuch zu csv gibt leere Datei
- 28. bevölkern ein Wörterbuch für Schleifen (Python) mit
- 29. Warum ist der Standardwert im Storyboard ausgegraut?
- 30. Splitting ein Semikolon getrennte Zeichenfolge in ein Wörterbuch, in Python
Das Problem mit pasing leere Liste als Standard Argument ist, dass es zwischen allen Aufrufen der Funktion geteilt wird - siehe die "wichtige Warnung" in https://docs.python.org/3/tuto rial/controlflow.html # default-argument-values – hamed