Neben den anderen Antworten, bei denen der Vorrang von not
niedriger ist als in
, entspricht Ihre Aussage tatsächlich:
not (True in [False, True])
Beachten Sie jedoch, dass Python zwei Rollen ( precedence
oder chaining
) verwendet, um dies zu trennen , wenn Sie Ihre Bedingung nicht von den anderen trennen. In diesem Fall hat Python Vorrang. Beachten Sie außerdem, dass Sie, wenn Sie eine Bedingung trennen möchten, alle Bedingungen in Klammern setzen müssen, nicht nur das Objekt oder den Wert:
(not True) in [False, True]
Wie bereits erwähnt, gibt es eine weitere Änderung von Python für Operatoren, die verkettet wird :
Basierend auf der Python- Dokumentation :
Beachten Sie, dass Vergleiche, Mitgliedschaftstests und Identitätstests alle dieselbe Priorität haben und eine Verkettungsfunktion von links nach rechts aufweisen, wie im Abschnitt Vergleiche beschrieben.
Das Ergebnis der folgenden Anweisung lautet beispielsweise False
:
>>> True == False in [False, True]
False
Weil Python die Anweisungen wie folgt verkettet:
(True == False) and (False in [False, True])
Welches genau ist False and True
das?False
.
Sie können davon ausgehen, dass das zentrale Objekt von zwei Operationen und anderen Objekten gemeinsam genutzt wird (in diesem Fall False).
Beachten Sie, dass dies auch für alle Vergleiche gilt, einschließlich Mitgliedschaftstests und Identitätsprüfungen, bei denen es sich um folgende Operanden handelt:
in, not in, is, is not, <, <=, >, >=, !=, ==
Beispiel:
>>> 1 in [1,2] == True
False
Ein weiteres berühmtes Beispiel ist der Nummernkreis:
7<x<20
das ist gleich:
7<x and x<20