Estou testando a estrutura da tupla e achei estranho quando uso o ==
operador como:
>>> (1,) == 1,
Out: (False,)
Quando atribuo essas duas expressões a uma variável, o resultado é verdadeiro:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Esta pergunta é diferente da regra de sintaxe de vírgula à direita da tupla do Python, na minha opinião. Eu pergunto ao grupo de expressões entre ==
operador.
python
tuples
equals-operator
Pythoner
fonte
fonte
Respostas:
Outras respostas já mostraram que o comportamento é devido à precedência do operador, conforme documentado aqui .
Vou mostrar a você como encontrar a resposta da próxima vez que tiver uma pergunta semelhante a essa. Você pode desconstruir como a expressão analisa usando o
ast
módulo:A partir disso, podemos ver que o código é analisado como Tim Peters explicou :
fonte
dis
: nesse caso, você verá doisLOAD_CONST
com valores diferentes ((1,)
e1
) e umBUILD_TUPLE
código opp.Esta é apenas a precedência do operador. Você primeiro
grupos assim:
então cria uma tupla com um único elemento a partir do resultado da comparação da tupla de um elemento
1,
com o número inteiro1
para igualdade. Eles não são iguais, então você obtém a tupla de 1False,
para um resultado.fonte
1+2, 2==3, 4*7
fez não grupo como(1+2), (2==3), (4*7)
. Na prática, as tuplas 1 quase nunca são usadas (bem, fora das perguntas do StackOverflow ;-)).True
/False
. Agora que eu entendo o que está acontecendo, é perfeitamente óbvio e razoável.Quando você faz
ele cria uma tupla com o resultado da comparação da tupla
(1,)
com um número inteiro e, assim, retornandoFalse
.Em vez disso, quando você atribui a variáveis, as duas tuplas iguais são comparadas entre si.
Podes tentar:
fonte