Wraz z innymi odpowiedziami, w których wspomniano o pierwszeństwie, not
jest niższy niż in
, w rzeczywistości twoje stwierdzenie jest równoważne z:
not (True in [False, True])
Ale zauważ, że jeśli nie oddzielisz swojego warunku od innych, Python użyje 2 ról ( precedence
lub chaining
) w celu ich oddzielenia, aw tym przypadku python użył pierwszeństwa. Pamiętaj również, że jeśli chcesz rozdzielić warunek, musisz umieścić wszystkie warunki w nawiasach, a nie tylko obiekt lub wartość:
(not True) in [False, True]
Ale jak wspomniano, istnieje kolejna modyfikacja Pythona w łańcuchach operatorów :
Na podstawie dokumentacji Pythona :
Należy pamiętać, że porównania, testy członkostwa i testy tożsamości mają ten sam priorytet i mają funkcję łączenia od lewej do prawej, jak opisano w sekcji Porównania.
Na przykład wynikiem następującej instrukcji jest False
:
>>> True == False in [False, True]
False
Ponieważ python będzie łączyć łańcuchy instrukcji w następujący sposób:
(True == False) and (False in [False, True])
Co to dokładnie False and True
jest False
.
Możesz założyć, że centralny obiekt będzie współdzielony między 2 operacjami i innymi obiektami (w tym przypadku False).
I zauważ, że dotyczy to również wszystkich porównań, w tym testów członkostwa i operacji testów tożsamości, które są następującymi operandami:
in, not in, is, is not, <, <=, >, >=, !=, ==
Przykład:
>>> 1 in [1,2] == True
False
Innym znanym przykładem jest zakres liczb:
7<x<20
co jest równe:
7<x and x<20