Oczekiwanie jest takie dla każdego kontenera Pythona C
for item in C:
assert item in C
przejdzie w porządku - nie możesz znaleźć to zadziwiające, jeśli jeden zmysł in(klauzula pętla) miał zupełnie inne znaczenie od innych (sprawdzania obecności)? Z pewnością! To oczywiście działa w ten sposób w przypadku list, zestawów, krotek, ...
Tak więc, gdy Cjest słownikiem, gdyby inw forpętli uzyskać krotki klucz / wartość , to zgodnie z zasadą najmniejszego zdziwienia inmusiałby również przyjąć taką krotkę jako operand po lewej stronie podczas sprawdzania zawartości.
Jak przydatne byłoby to? Rzeczywiście całkiem bezużyteczne, po prostu tworząc if (key, value) in Csynonim if C.get(key) == value- co jest sprawdzianem, który, jak sądzę, mogłem wykonać lub chciałem wykonać 100 razy rzadziej niż to, co w if k in Crzeczywistości oznacza , sprawdzając obecność tylko klucza i całkowicie ignorując wartość.
Z drugiej strony chęć zapętlenia tylko na klawiszach jest dość powszechna, np .:
for k in thedict:
thedict[k] += 1
posiadanie wartości również nie pomogłoby szczególnie:
for k, v in thedict.items():
thedict[k] = v + 1
w rzeczywistości nieco mniej jasne i mniej zwięzłe. (Zauważ, że itemsbyła to oryginalna pisownia "właściwych" metod do uzyskiwania par klucz / wartość: niestety było to w czasach, gdy takie metody dostępu zwracały całe listy, więc aby obsługiwać "tylko iterację" trzeba było wprowadzić alternatywną pisownię i iteritems było - w Pythonie 3, gdzie ograniczenia kompatybilności wstecznej z poprzednimi wersjami Pythona zostały znacznie osłabione, stało się itemsponownie).
x in footylko jeśliiw pewnym momenciefor i in fooprzyjmie wartośćx, powiedziałbym, że byłaby to bardzo duża niespójność.