Lorsque j'ai cherché des réponses à cette question , j'ai constaté que je ne comprenais pas ma propre réponse.
Je ne comprends pas vraiment comment cela est analysé. Pourquoi le deuxième exemple renvoie-t-il 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
Merci pour toute aide. Je pense que je dois rater quelque chose de vraiment évident.
Je pense que c'est subtilement différent du duplicata lié:
Pourquoi l'expression 0 <0 == 0 renvoie False en Python? .
Les deux questions concernent la compréhension humaine de l'expression. Il semblait y avoir deux façons (à mon avis) d'évaluer l'expression. Bien sûr, ni l'un ni l'autre n'étaient corrects, mais dans mon exemple, la dernière interprétation est impossible.
En 0 < 0 == 0
vous regardant, vous pourriez imaginer que chaque moitié est évaluée et a un sens en tant qu'expression:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Ainsi, le lien répond pourquoi cela évalue False
:
>>> 0 < 0 == 0
False
Mais avec mon exemple 1 in ([1,0] == True)
n'a pas de sens en tant qu'expression, donc au lieu qu'il y ait deux interprétations possibles (certes erronées), une seule semble possible:
>>> (1 in [1,0]) == True
==
liaison est plus étroite quein
, donc[1,0] == True
est évaluée en premier, puis le résultat de cela est alimenté1 in other_result
.