Quando stavo guardando le risposte a questa domanda , ho scoperto di non aver capito la mia risposta.
Non capisco davvero come questo venga analizzato. Perché il secondo esempio restituisce False?
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
Grazie per qualsiasi aiuto. Penso che mi debba mancare qualcosa di veramente ovvio.
Penso che questo sia leggermente diverso dal duplicato collegato:
Perché l'espressione 0 <0 == 0 restituisce False in Python? .
Entrambe le domande hanno a che fare con la comprensione umana dell'espressione. Sembrava che ci fossero due modi (secondo me) di valutare l'espressione. Naturalmente nessuno dei due era corretto, ma nel mio esempio l'ultima interpretazione è impossibile.
Guardandoti 0 < 0 == 0
puoi immaginare che ogni metà venga valutata e abbia senso come espressione:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Quindi il link risponde al motivo per cui questo valuta False
:
>>> 0 < 0 == 0
False
Ma con il mio esempio 1 in ([1,0] == True)
non ha senso come espressione, quindi invece di avere due possibili interpretazioni (certamente errate), solo una sembra possibile:
>>> (1 in [1,0]) == True
==
legame è più stretto diin
, quindi[1,0] == True
viene valutato prima, quindi il risultato viene alimentato1 in other_result
.