Je teste la structure du tuple et j'ai trouvé que c'était étrange lorsque j'utilise l' ==
opérateur comme:
>>> (1,) == 1,
Out: (False,)
Lorsque j'attribue ces deux expressions à une variable, le résultat est vrai:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Cette question est différente de la règle de syntaxe de virgule de fin de tuple Python à mon avis. Je demande au groupe d'expressions entre ==
opérateur.
python
tuples
equals-operator
Pythoner
la source
la source
Réponses:
D'autres réponses vous ont déjà montré que le comportement est dû à la priorité des opérateurs, comme documenté ici .
Je vais vous montrer comment trouver la réponse vous-même la prochaine fois que vous aurez une question similaire à celle-ci. Vous pouvez déconstruire la façon dont l'expression analyse à l'aide du
ast
module:À partir de là, nous pouvons voir que le code est analysé comme l'a expliqué Tim Peters :
la source
dis
- Dans ce cas, vous en verrez deuxLOAD_CONST
avec des valeurs différentes ((1,)
et1
) et unBUILD_TUPLE
code opp.C'est juste la priorité des opérateurs. Votre première
groupes comme ça:
donc construit un tuple avec un seul élément à partir du résultat de la comparaison du tuple
1,
à un élément à l'entier1
pour l'égalité Ils ne sont pas égaux, vous obtenez donc le tuple 1False,
pour un résultat.la source
1+2, 2==3, 4*7
ne groupait pas en tant que(1+2), (2==3), (4*7)
. En pratique, les 1-tuples ne sont presque jamais utilisés (enfin, en dehors des questions StackOverflow ;-)).True
/False
. Maintenant que je comprends ce qui se passe, c'est parfaitement évident et raisonnable.Quand tu fais
il construit un tuple avec le résultat de la comparaison du tuple
(1,)
avec un entier et donc du retourFalse
.Au lieu de cela, lorsque vous affectez des variables, les deux tuples égaux sont comparés l'un à l'autre.
Tu peux essayer:
la source