Что это значит?"(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,)