Widoki słownika są zasadniczo tym, co mówi ich nazwa: widoki są po prostu jak okno na klucze i wartości (lub elementy) słownika. Oto fragment oficjalnej dokumentacji dla Pythona 3:
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> keys # No eggs anymore!
dict_keys(['sausage', 'bacon', 'spam'])
>>> values # No eggs value (2) anymore!
dict_values([1, 1, 500])
(Odpowiednik Pythona 2 używa dishes.viewkeys()
i dishes.viewvalues()
.)
Ten przykład pokazuje dynamiczny charakter widoków : widok kluczy nie jest kopią kluczy w danym momencie, ale raczej prostym oknem, które pokazuje klucze; jeśli ulegną zmianie, zmieni się również to, co widzisz przez okno. Ta funkcja może być przydatna w pewnych okolicznościach (na przykład można pracować z widokiem kluczy w wielu częściach programu zamiast przeliczać bieżącą listę kluczy za każdym razem, gdy są potrzebne) - należy zauważyć, że jeśli klucze w słowniku zostaną zmodyfikowane podczas iterowania widoku, sposób, w jaki iterator powinien zachowywać się, nie jest dobrze zdefiniowany, co może prowadzić do błędów .
Zaletą jest to, że patrząc , powiedzmy, klucze używają tylko małej i stałej ilości pamięci i wymagają małego i stałego czasu procesora , ponieważ nie ma tworzenia listy kluczy (z drugiej strony Python 2, często niepotrzebnie tworzy nową listę, jak cytuje Rajendran T, która zajmuje pamięć i czas w ilości proporcjonalnej do długości listy). Kontynuując analogię z oknem, jeśli chcesz zobaczyć krajobraz za ścianą, po prostu zrobisz w nim otwór (zbudujesz okno); skopiowanie kluczy do listy oznaczałoby zamiast tego pomalowanie kopii krajobrazu na ścianie - kopia wymaga czasu, miejsca i nie aktualizuje się sama.
Podsumowując, widoki to po prostu… widoki (okna) w Twoim słowniku, które pokazują zawartość słownika nawet po zmianie. Oferują funkcje, które różnią się od tych z list: lista kluczy zawiera kopię kluczy słownika w danym momencie, podczas gdy widok jest dynamiczny i znacznie szybszy do uzyskania, ponieważ nie musi kopiować żadnych danych ( klucze lub wartości) w celu utworzenia.