Testuję strukturę krotki i stwierdziłem, że jest to dziwne, gdy używam ==
operatora takiego:
>>> (1,) == 1,
Out: (False,)
Kiedy przypiszę te dwa wyrażenia do zmiennej, wynik jest prawdziwy:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Moim zdaniem to pytanie różni się od reguły składni końcowego przecinka krotki w Pythonie . Pytam o grupę wyrażeń między ==
operatorem.
python
tuples
equals-operator
Pythoner
źródło
źródło
Odpowiedzi:
Inne odpowiedzi już pokazały, że zachowanie to wynika z pierwszeństwa operatorów, jak opisano tutaj .
Pokażę ci, jak samodzielnie znaleźć odpowiedź, gdy następnym razem będziesz mieć podobne pytanie. Możesz zdekonstruować sposób analizy wyrażenia za pomocą
ast
modułu:Z tego widać, że kod jest analizowany, jak wyjaśnił Tim Peters :
źródło
dis
- w tym przypadku zobaczysz dwaLOAD_CONST
z różnymi wartościami ((1,)
i1
) iBUILD_TUPLE
kodem opp.To tylko pierwszeństwo operatorów. Twój pierwszy
grupy takie jak ta:
więc tworzy krotkę z pojedynczym elementem na podstawie wyniku porównania jednoelementowej krotki
1,
z liczbą całkowitą1
dla równości Nie są równe, więc otrzymujesz 1-krotkęFalse,
jako wynik.źródło
1+2, 2==3, 4*7
tak nie grupę jako(1+2), (2==3), (4*7)
. W praktyce 1-krotki są rzadko używane (no cóż, poza pytaniami StackOverflow ;-)).True
/False
. Teraz, gdy rozumiem, co się dzieje, jest to całkowicie oczywiste i rozsądne.Kiedy to zrobisz
tworzy krotkę z wynikiem porównania krotki
(1,)
z liczbą całkowitą, a tym samym zwracaFalse
.Zamiast tego, gdy przypisujesz zmienne, porównywane są ze sobą dwie równe krotki .
Możesz spróbować:
źródło