Wenn Sie sich den Quellcode ansehen, scheint es der einzige "Grund" zu sein, dass OrderedDict
wird in Python geschrieben, während defaultdict
in C steht. Aber es scheint sich zu ändern, da Python 3.5 ein cOrderedDict haben sollte (siehe Python Bugs ), was zeigt, wie schlecht meine einzige Erklärung tatsächlich ist.
Kann jemand eine bessere Erklärung liefern? Ich hoffe gibt es einen besseren Grund.
Bearbeiten :
Die angebliche doppelte Antwort ist in Ordnung für Python 2.7, nicht für Python 3, wo die Klassen- / Typ-Unterscheidung weg ist. OrderedDict
und defaultdict
werden beide vom Interpreter selbst als Klassen betrachtet:
Basierend auf dem, was ich in den Python-dev-Archiven finden kann, ist dies nur ein Fall der Entwickler, die nicht ihren eigenen Richtlinien folgen.
Guido hat tatsächlich vorgeschlagen, das Umbenennen von defaultdict
in DefaultDict
zu korrigieren Diese Inkonsistenz während der Diskussion der PEP, die OrderedDict
eingeführt:
Wie dem auch sei, das Collections-Modul scheint bereits vorhanden zu sein intern inkonsistent -
NamedTuple
vs.defaultdict
. In einem Sinn defaultdict ist das merkwürdige hier draußen, da das Dinge sind, die du importierst von einem Modul sind sie nicht eingebaut. Vielleicht sollte es umbenannt werdenNamedDict
?
Beachten Sie, dass NamedDict
ein Tippfehler ist, er meinte DefaultDict
:
& gt; Ich nehme an, du meinst "DefaultDict".
Ja, ich war abgelenkt. : - (
Ich bin nicht sicher, warum diese Änderung (und ähnliche Änderungen für andere Module, zB socket.socket
, datetime.datetime
) nie gemacht wurde, da Guido dies unterstützt.
Ironischerweise war es Guido (oder vielleicht Alex Martelli), der kam. up mit dem Namen defaultdict
, trotz der Tatsache, dass sie auf einer internen Klasse basieren, die Google namens DefaultDict
:
Google hat einen internen Datentyp namens
DefaultDict
, der abgerufen wird hat bei der Konstruktion einen Standardwert übergeben. Seine__getitem__
Methode, AnstattKeyError
zu erhöhen, wird eine flache Kopie (!) des angegebenen eingefügt Standardwert in das Diktat, wenn der Wert nicht gefunden wird.... schnippeln ...
Beim Mittagessen mit Alex Martelli schlug er eine Unterklasse von dict vor mit diesem Verhalten (aber in C implementiert) wäre eine gute Ergänzung dazu die Sprache. Es sieht so aus, als wäre es nicht schwer zu implementieren. Es könnte sei ein eingebauter Name namens
defaultdict
. Das erste, erforderliche Argument zur Konstruktor sollte der Standardwert sein. Verbleibende Argumente (auch Schlüsselwort args) werden unverändert an den dict-Konstruktor übergeben.
Die Diskussion wurde schnell von defaultdict
verschoben, da sie ein Teil des Moduls collections
ist, aber der Name des gesamten Kleinbuchstabens blieb hängen. Diese Diskussion fand bereits 2006 statt, so dass PEP 8 schon seit vielen Jahren existiert. Ich bin mir nicht sicher, wieso es nie jemandem eingefallen ist, dass es zu der Zeit den Namen DefaultDict
haben sollte.
Tags und Links python