¿Cuál es el significado de "(1,)== 1" en Python?
tuples equals-operator (3)
Estoy probando la estructura de tuplas, y descubrí que es 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 tupla de Python
en mi opinión.
Pido el grupo de expresiones entre
==
operador.
Cuando tu lo hagas
>>> (1,) == 1,
construye una tupla con el resultado de comparar la
tupla
(1,)
con un
número entero
y devolver
False
.
En cambio, cuando asigna a variables, las dos tuplas iguales se comparan entre sí.
Puedes probar:
>>> x = 1,
>>> x
(1,)
Esto es solo prioridad del operador. Tu primero
(1,) == 1,
grupos así:
((1,) == 1),
así que construye una tupla con un solo elemento a partir del resultado de comparar la tupla
1,
un elemento
1,
con el entero
1
para la igualdad. No son iguales, por lo que obtienes la 1 tupla
False,
para un resultado.
Otras respuestas ya le han mostrado que el comportamiento se debe a la precedencia del operador, como se documenta here .
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 módulo
ast
:
>>> import ast
>>> source_code = ''(1,) == 1,''
>>> print(ast.dump(ast.parse(source_code), annotate_fields=False))
Module([Expr(Tuple([Compare(Tuple([Num(1)], Load()), [Eq()], [Num(1)])], Load()))])
A partir de esto, podemos ver que el código se analiza como Tim Peters explicó :
Module([Expr(
Tuple([
Compare(
Tuple([Num(1)], Load()),
[Eq()],
[Num(1)]
)
], Load())
)])