Für jeden Python-Behälter C, ist die Erwartung, dass
for item in C:
assert item in C
ganz gut passieren - nicht Sie es erstaunlich finden, wenn ein Gefühl der in
(die Schleife Klausel) hatte eine ganz andere Bedeutung von der anderen (die Anwesenheitskontrolle)? Ich würde es sicher tun! Es funktioniert natürlich auf diese Weise für Listen, Mengen, Tupeln, ...
Also, wenn C
ist ein Wörterbuch, wenn in
waren Schlüssel/Wert-Tupel in einer for
Schleife erhalten, dann, nach dem Prinzip des geringsten Erstaunen, in
müsste auch ein solches Tupel wie sein linker Operand im Containment-Check nehmen.
Wie nützlich wäre das? Ziemlich nutzlos in der Tat, im Grunde machen 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, selten 100-mal mehr als das, was tatsächlich if k in C
bedeutet, die Überprüfung der Anwesenheit des Schlüssels nur und den Wert vollständig ignorieren.
Auf der anderen Seite, eine Schleife zu wollen nur auf Tasten ist durchaus üblich, zB:
for k in thedict:
thedict[k] += 1
den Wert würde helfen, auch nicht besonders:
for k, v in thedict.items():
thedict[k] = v + 1
tatsächlich etwas weniger klar und weniger prägnant. (Beachten Sie, dass items
die ursprüngliche Schreibweise der "richtigen" Methoden war, um Schlüssel/Wert-Paare zu erhalten: Leider war das zu der Zeit, als solche Accessoren ganze Listen zurückgaben, um "nur Iterieren" zu unterstützen, musste eine alternative Schreibweise sein eingeführt, und iteritems
war es - in Python 3, wo Abwärtskompatibilität Einschränkungen mit früheren Python-Versionen stark geschwächt wurden, wurde es wieder items
).
+1 Gute Frage. Mal sehen, was Alex zu sagen hat – NullUserException