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
astmódulo:A partir de esto, podemos ver que el código se analiza como explicó Tim Peters :
fuente
dis: en este caso, verá dosLOAD_CONSTcon valores diferentes ((1,)y1) y unBUILD_TUPLEcó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 entero1para determinar la igualdad. No son iguales, por lo que obtiene la tupla 1False,como resultado.fuente
1+2, 2==3, 4*7no 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