Cuando estaba buscando respuestas al this question, descubrí que no entendía mi propia respuesta.¿Por qué (1 en [1,0] == Verdadero) evaluar a Falso?
Realmente no entiendo cómo se está analizando 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 debe estar perdiendo algo realmente obvio.
creo que esto es sutilmente diferente al duplicado vinculado:
Why does the expression 0 < 0 == 0 return False in 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 de los dos era correcto, pero en mi ejemplo, la última interpretación es imposible.
En cuanto a 0 < 0 == 0
que podía imaginar cada mitad se está evaluando y dar sentido como expresión:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Así que los enlaces respuestas por qué esto evalúa False
:
>>> 0 < 0 == 0
False
pero con mi ejemplo 1 in ([1,0] == True)
doesn No tiene sentido como expresión, así que en lugar de que haya dos interpretaciones posibles (por cierto erróneas), solo una parece posible:
>>> (1 in [1,0]) == True
Precedente del operador ... el '==' se une más que 'in', entonces' [1,0] == True' se evalúa primero, luego el resultado de eso se alimenta a '1 en other_result'. –
He eliminado la etiqueta Python-2.7, ya que Python 3.2 se comporta de la misma manera. – lvc
@Marc B: no explica la segunda expresión –