Wat is de betekenis van “(1,) == 1,” in Python?

Ik ben de tuple-structuur aan het testen en ik vond het vreemd wanneer ik de operator ==gebruik, zoals:

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

Als ik deze twee uitdrukkingen aan een variabele toewijs, is het resultaat waar:

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

Deze vraag is anders dan Python tuple volgkomma syntaxisregelin mijn visie. Ik vraag de groep uitdrukkingen tussen de operator ==.


Antwoord 1, autoriteit 100%

Dit is alleen operatorprioriteit. Je eerste

(1,) == 1,

groepen vinden dit leuk:

((1,) == 1),

dus bouwt een tuple met een enkel element uit het resultaat van het vergelijken van de tuple met één element 1,met het gehele getal 1voor gelijkheid. Ze zijn niet gelijk, dus je krijgt de 1-tuple False,voor een resultaat.


Antwoord 2, autoriteit 57%

Andere antwoorden hebben je al laten zien dat het gedrag te wijten is aan de operatorprioriteit, zoals gedocumenteerd hier.

Ik ga je laten zien hoe je het antwoord zelf kunt vinden de volgende keer dat je een soortgelijke vraag hebt. U kunt deconstrueren hoe de expressie wordt geparseerd met behulp van de astmodule:

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

Hieruit kunnen we zien dat de code wordt geparseerd zoals Tim Peters heeft uitgelegd:

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

Antwoord 3, autoriteit 8%

Als je dat doet

>>> (1,) == 1,

het bouwt een tuple met het resultaat van het vergelijken van de tuple(1,)met een integeren retourneert dus False.

Als je variabelen toewijst, worden de twee gelijke tuplesmet elkaar vergeleken.

Je kunt het proberen:

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

Other episodes