Sulla base di quello che posso trovare sugli archivi python-dev, questo è solo un caso di sviluppatori non seguendo le proprie linee guida.
Guido realtà suggerito renaming defaultdict
to DefaultDict
per risolvere questa incoerenza durante la discussione del PEP che ha introdotto OrderedDict
:
In ogni caso, sembra che il modulo di collezioni in particolare, è già internamente incoerente - NamedTuple
vs. defaultdict
. In un certo senso, defaultdict è quello strano qui fuori, dato che sono cose che importa da qualche modulo, non sono built-in. Forse dovrebbe essere rinominato in NamedDict
?
Nota che NamedDict
è un errore di battitura, he meant DefaultDict
:
> Suppongo che dire "defaultdict".
Sì, sono stato distratto. :-(
Io non sono sicuro perché questo cambiamento (e le modifiche simili per gli altri moduli, per esempio socket.socket
, datetime.datetime
) non è mai stato fatto, dal momento che Guido ha sostenuto farlo.
Ironia della sorte, (o forse Alex Martelli) che è venuto con il nome defaultdict
, nonostante il fatto che sono stati basandosi su una classe interna di Google stava usando chiamato DefaultDict
:
Google ha un tipo di dati interno chiamato un DefaultDict
che ottiene 012.351.ha passato un valore predefinito al momento della costruzione. Il metodo __getitem__
, invece di aumentare KeyError
, inserisce una copia superficiale (!) Del valore predefinito nel dict quando il valore non viene trovato.
... snip ...
Durante la colazione con Alex Martelli, ha proposto che una sottoclasse di dict con questo comportamento (ma implementato in C) sarebbe una buona aggiunta al la lingua. Sembra che non sia difficile da implementare.Potrebbe essere un predefinito defaultdict
. Il primo argomento obbligatorio per il costruttore dovrebbe essere il valore predefinito. Gli argomenti rimanenti (anche gli argomenti di parole chiave ) vengono passati invariati al costruttore di dict.
Discussione spostato rapidamente da defaultdict
essere un built-in al fatto che è parte del modulo collections
, ma il nome tutto minuscolo bloccati. Questa discussione si è svolta nel 2006, quindi PEP 8 era in circolazione da molti anni. Non sono sicuro del motivo per cui non è mai venuto in mente a nessuno che dovesse essere chiamato DefaultDict
al momento.
"Ora che le classi e i tipi dovrebbero essere unificati, la differenza tra CamelCase per le classi Python e minuscole per i tipi C è frustrantemente scomoda." - user2357112, da un commento nel duplicato contrassegnato. – user2864740
Indirizzare il punto "questo sta cambiando": non è così che python 3 fa le implementazioni. Ad esempio py3, si esegue l'importazione sottaceto e questo delegato a importare _pickle - l'implementazione c, se disponibile. – roippi
Grazie, @roippi, mi riferivo alle patch in che sono chiamate 'cOrderedDict'. Il fatto che entrambe le versioni C e Python vengano importate con lo stesso nome è irrilevante. Le convenzioni di denominazione per 'defaultdict' e' OrderedDict' continuano a non corrispondere. –