Cuando estaba buscando respuestas a esta pregunta , descubrí que no entendía mi propia respuesta.
Realmente no entiendo cómo se analiza esto. ¿Por qué el segundo ejemplo devuelve 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
Gracias por cualquier ayuda. Creo que me estoy perdiendo algo realmente obvio.
Creo que esto es sutilmente diferente al duplicado vinculado:
¿Por qué la expresión 0 <0 == 0 devuelve False en Python? .
Ambas preguntas tienen que ver con la comprensión humana de la expresión. Parecía haber dos formas (en mi opinión) de evaluar la expresión. Por supuesto, ninguno era correcto, pero en mi ejemplo, la última interpretación es imposible.
Mirándote 0 < 0 == 0
podrías imaginar que cada mitad es evaluada y tiene sentido como una expresión
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Entonces el enlace responde por qué esto evalúa False
:
>>> 0 < 0 == 0
False
Pero con mi ejemplo 1 in ([1,0] == True)
no tiene sentido como una expresión, por lo que en lugar de haber dos interpretaciones posibles (ciertamente erróneas), solo una parece posible:
>>> (1 in [1,0]) == True
==
unión es más fuerte quein
, por lo que[1,0] == True
primero se evalúa, luego el resultado de eso se alimenta a1 in other_result
.