python tuples equals-operator

¿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()) )])