Warum wird OrderedDict in camel case angegeben, während defaultdict in Kleinbuchstaben ist?

8

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:

%Vor%     
Luciano Ramalho 31.08.2014, 23:15
quelle

1 Antwort

11

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 werden    NamedDict ?

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 :

benutzt hat
  

Google hat einen internen Datentyp namens DefaultDict , der abgerufen wird   hat bei der Konstruktion einen Standardwert übergeben. Seine __getitem__ Methode,   Anstatt KeyError 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.

    
dano 31.08.2014 23:38
quelle

Tags und Links