118 votes

Quelle est la signification de "(1)) == 1" en Python?

Je me suis mise à l'essai du n-uplet de la structure, et j'ai trouvé ça étrange quand j'utilise l' == opérateur comme:

>>>  (1,) == 1,
Out: (False,)

Quand j'assigne ces deux expressions à une variable, le résultat est vrai:

>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True

Cette question est différente de Python tuple virgule règle de syntaxe dans mon point de vue. Je demande au groupe d'expressions entre == de l'opérateur.

151voto

Tim Peters Points 16225

Ceci est juste la priorité des opérateurs. Votre première

 (1,) == 1,
 

des groupes comme ceux-ci:

 ((1,) == 1),
 

construit donc un tuple avec un seul élément à partir du résultat de la comparaison du tuple à un élément 1, à l'entier 1 pour l'égalité. Ils ne sont pas égaux. Vous obtenez donc le 1-tuple. False, pour un résultat.

89voto

wim Points 35274

D'autres réponses ont déjà montré que le comportement est dû à la priorité des opérateurs, comme indiqué ici.

Je vais vous montrer comment trouver la réponse vous-même la prochaine fois que vous avez une question semblable à cela. Vous pouvez déconstruire la manière dont l'expression analyse à l'aide de l' ast module de:

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

De cela, nous pouvons voir que le code est analysé comme Tim Peters explique:

Module([Expr(
    Tuple([
        Compare(
            Tuple([Num(1)], Load()), 
            [Eq()], 
            [Num(1)]
        )
    ], Load())
)])

12voto

mng Points 348

Quand tu fais

 >>> (1,) == 1,
 

il construit un tuple avec le résultat de la comparaison du tuple (1,) avec un entier et renvoie ainsi False .

Au lieu de cela, lorsque vous affectez des variables, les deux nuplets égaux sont comparés.

Tu peux essayer:

 >>> x = 1,
>>> x
(1,)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X