Я тестирую структуру кортежа, и мне показалось странным, когда я использую такой ==
оператор, как:
>>> (1,) == 1,
Out: (False,)
Когда я назначаю эти два выражения переменной, результат будет истинным:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
На мой взгляд, этот вопрос отличается от правила синтаксиса завершающей запятой кортежа Python . Прошу группу выражений между ==
операторами.
python
tuples
equals-operator
Pythoner
источник
источник
Ответы:
Другие ответы уже показали вам, что поведение связано с приоритетом оператора, как описано здесь .
Я собираюсь показать вам, как найти ответ самостоятельно, когда в следующий раз у вас возникнет вопрос, похожий на этот. Вы можете разобрать, как выражение анализирует, используя
ast
модуль:Из этого мы видим, что код анализируется, как объяснил Тим Петерс :
источник
dis
в этом случае вы увидите дваLOAD_CONST
с разными значениями ((1,)
и1
) иBUILD_TUPLE
код opp.Это просто приоритет оператора. Твой первый
такие группы:
поэтому строит кортеж с одним элементом из результата сравнения одноэлементного кортежа
1,
с целым числом1
на равенство. Они не равны, поэтому вы получаете 1-кортежFalse,
для результата.источник
1+2, 2==3, 4*7
сделал не группу , как(1+2), (2==3), (4*7)
. На практике кортежи с единицами почти никогда не используются (ну, кроме вопросов StackOverflow ;-)).True
/False
. Теперь, когда я понимаю, что происходит, это совершенно очевидно и разумно.Когда ты делаешь
он строит кортеж из результата сравнения кортежа
(1,)
с целым числом и, таким образом, возвращаетFalse
.Вместо этого, когда вы присваиваете переменным, два равных кортежа сравниваются друг с другом.
Можешь попробовать:
источник