Estoy probando la estructura de la tupla y me parece extraño cuando uso el ==
operador como:
>>> (1,) == 1,
Out: (False,)
Cuando asigno estas dos expresiones a una variable, el resultado es verdadero:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Esta pregunta es diferente de la regla de sintaxis de coma final de tuplas de Python en mi opinión. Le pregunto al grupo de expresiones entre ==
operador.
python
tuples
equals-operator
Pythoner
fuente
fuente
Respuestas:
Otras respuestas ya le han mostrado que el comportamiento se debe a la precedencia del operador, como se documenta aquí .
Le mostraré cómo encontrar la respuesta usted mismo la próxima vez que tenga una pregunta similar a esta. Puede deconstruir cómo se analiza la expresión utilizando el
ast
módulo:A partir de esto, podemos ver que el código se analiza como explicó Tim Peters :
fuente
dis
: en este caso, verá dosLOAD_CONST
con valores diferentes ((1,)
y1
) y unBUILD_TUPLE
código opp.Esto es solo la precedencia del operador. Tu primero
grupos así:
por lo que construye una tupla con un solo elemento a partir del resultado de comparar la tupla de un elemento
1,
con el número entero1
para determinar la igualdad. No son iguales, por lo que obtiene la tupla 1False,
como resultado.fuente
1+2, 2==3, 4*7
no se agrupara como(1+2), (2==3), (4*7)
. En la práctica, las tuplas 1 casi nunca se usan (bueno, fuera de las preguntas de StackOverflow ;-)).True
/False
. Ahora que entiendo lo que está pasando, es perfectamente obvio y razonable.Cuando tu lo hagas
construye una tupla con el resultado de comparar la tupla
(1,)
con un entero y, por lo tanto, regresaFalse
.En cambio, cuando asigna a variables, los dos tuplas iguales se comparan entre sí.
Puedes probar:
fuente