Accanto alle altre risposte che parlano del precedenza di not
è inferiore in
, in realtà la sua dichiarazione è equivalente a:
not (True in [False, True])
ma è da notare che se non separare la sua condizione dalle altre, pitone userà 2 ruoli (precedence
o chaining
) per separarlo, e in questo caso python ha usato la precedenza. Si noti inoltre che se si vuole separare una condizione è necessario mettere tutte le condizioni tra parentesi non solo l'oggetto o il valore:
(not True) in [False, True]
Ma, come accennato, v'è un'altra modifica da Python a operatori che è concatenamento:
sulla base di pitone documentation:
Nota che i confronti, i test di appartenenza, e test d'identità, un Avremo la stessa precedenza e avremo una funzionalità da sinistra a destra che concatena la funzione come descritto nella sezione Confronti.
Per esempio il risultato della seguente dichiarazione è False
:
>>> True == False in [False, True]
False
perché catena Python le dichiarazioni come segue:
(True == False) and (False in [False, True])
Che è esattamente False and True
che è False
.
È possibile assumere che l'oggetto centrale verrà condiviso tra 2 operazioni e altri oggetti (False in questo caso).
E nota che il suo vero anche per tutti i confronti, inclusi i test di appartenenza e le operazioni di test d'identità che sono seguenti operandi:
in, not in, is, is not, <, <=, >, >=, !=, ==
Esempio:
>>> 1 in [1,2] == True
False
Un altro esempio famoso è intervallo di numeri:
7<x<20
che è uguale a:
7<x and x<20
correlati http://stackoverflow.com/questions/31354429/why-is-true-is-false-false-false-in-python/31354514#31354514 – Kasramvd