Что это значит?"(1,) == 1," в Python?

Я тестирую структуру кортежа, и я обнаружил, что это странно, когда я использую == оператор как:

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

когда я назначаю эти два выражения переменной, результат истинен:

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

эти вопросы отличаются от правило синтаксиса запятых кортежа Python на мой взгляд. Я спрашиваю группу выражений между == оператора.

3 ответов


другие ответы уже показали вам, что поведение связано с приоритетом оператора, как задокументировано здесь.

Я собираюсь показать вам, как найти ответ самостоятельно в следующий раз, когда у вас есть вопрос, подобный этому. Вы можете деконструировать, как выражение анализирует с помощью 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()))])

из этого мы видим, что код разбирается как объяснил Тим Питерс:

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

Это просто приоритет операторов. Ваш первый

(1,) == 1,

группы вот так:

((1,) == 1),

так строит кортеж с одним элементом из результата сравнения один элемент кортежа!--2--> целое 1 для равенства они не равны, поэтому вы получаете 1-кортеж False, для результата.


когда вы

>>> (1,) == 1,

он строит кортеж с результатом сравнения кортежа!--8--> (1,) С целое и таким образом возвращая False.

вместо этого, когда вы назначаете переменные, два равных кортежей сравниваются друг с другом.

можно попробовать:

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