2011-09-04 17 views
23

Mi sono imbattuto in questi tre tipi quando ho usato il metodo viewkeys(), viewitems() e viewvalues ​​() di collections.Counter.cosa è dict_keys, dict_items e dict_values ​​

Il valore di questi tre metodi restituiti è di tipo dict_keys, dict_items e dict_values.

Sono iterabili, come ho notato.

Ma la mia domanda è:

  • Perché esistono questi tre tipi? O qual è il loro utilizzo?

risposta

28

Il documento What's new in 2.7 è un posto in cui questi sono stati introdotti. Questi "punti di vista" sono stati introdotti (proposto here) per Python 3 (e supportato a 2.7, come hai visto) per servire come il migliore dei mondi per i pezzi del ditt cui si riferiscono.

Prima abbiamo avuto i metodi keys/values/items che semplicemente hanno fatto liste. Questo spreca memoria copiando le informazioni del dict e abbiamo avuto i metodi iterkeys/itervalues/iteritems che non hanno sprecato questa memoria, ma non erano molto caratterizzati (l'unica cosa che si può fare è iterare su di essi, e si potrebbe farlo solo una volta). Queste nuove viste hanno caratteristiche logiche, come le operazioni di set, un confronto efficiente e l'iterabilità di più volte.