Für jeden Python-Container C ist dies zu erwarten
for item in C:
assert item in C
wird gut gehen - würden Sie es nicht erstaunlich finden, wenn ein Sinn für in
(die Schleifenklausel) eine völlig andere Bedeutung hätte als der andere (die Anwesenheitsprüfung)? Ich würde sicher! Das funktioniert natürlich auch für Listen, Sets, Tupel, ...
Wenn C
also ein Wörterbuch in
Schlüssel / Wert-Tupel in einer for
Schleife liefert , in
müsste nach dem Prinzip des geringsten Erstaunens auch ein solches Tupel als linker Operand in der Containment-Prüfung verwendet werden.
Wie nützlich wäre das? Ziemlich nutzlos in der Tat, so dass im Grunde if (key, value) in C
ein Synonym für if C.get(key) == value
- das ist ein Scheck , den ich glaube , ich habe, durchgeführt, oder wollte ausführen, 100 - mal seltener als das, was if k in C
tatsächlich Mittel , die Überprüfung der Anwesenheit des Schlüssels nur und vollständig den Wert ignorieren.
Auf der anderen Seite ist es durchaus üblich, nur auf Tasten schleifen zu wollen, z.
for k in thedict:
thedict[k] += 1
den Wert auch zu haben, würde nicht besonders helfen:
for k, v in thedict.items():
thedict[k] = v + 1
eigentlich etwas weniger klar und weniger prägnant. (Beachten Sie, dass dies items
die ursprüngliche Schreibweise der "richtigen" Methoden zum Abrufen von Schlüssel / Wert-Paaren war: Leider war dies in den Tagen der Fall, als solche Accessoren ganze Listen zurückgaben. Um "nur iterieren" zu unterstützen, musste eine alternative Schreibweise eingeführt werden und iteritems
es war - in Python 3, wo die Abwärtskompatibilitätsbeschränkungen mit früheren Python-Versionen stark geschwächt waren, wurde es items
wieder).
x in foo
nur dann , wenni
in irgendwannfor i in foo
den Wert von annimmtx
, würde ich sagen, dass dies eine sehr große Inkonsistenz wäre.