Czy ktoś może wyjaśnić, w jaki sposób te wyniki są możliwe (Python 2.6):

>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False

Myślę, że jeden z dwóch ostatnich pasuje do pierwszego, ale najwyraźniej operatorzy w pierwszym oświadczeniu są w jakiś sposób powiązane?!

0
monoceres 5 wrzesień 2012, 11:06

3 odpowiedzi

Najlepsza odpowiedź

Pierwszy przykład pokazuje łańcuch porównawczy. 1<3>2 oznacza 1<3 and 3>2 (z wyjątkiem każdego wyrażenia jest oceniane tylko raz). Dotyczy to wszystkich operatorów porównawczych w Pythonie.

Twoje drugie dwa przykłady wymuszają jeden porównanie, które mają być najpierw oceniane, co skutkuje wartością logiczną, która jest następnie porównana z pozostałym całkowitym.

9
BrenBarn 5 wrzesień 2012, 07:27

W pierwszym przypadku 1<3>2 1 1 jest w rzeczywistości mniejszy niż 3 i 3 jest większa niż 2, więc True.

W drugim przypadku {X1}} (1<3) ocenia jako True, który reprezentowany jako 1, więc 1 nie jest większa niż 2.

W trzeciej sprawie 1<(3>2) 1 nie jest mniejsza niż True, który reprezentowany jako 1.

4
Fedor Gogolev 5 wrzesień 2012, 07:08

Ostatnie dwa wypowiedzi porównują Booleans przeciw wartościowiowi liczbowe:

>>> True > 2
False
>>> 1 < True
False

Pierwszym oświadczeniem jest Porównawanie łańcucha, które działa dla wszystkich porównania boolowskiego w Pythonie . Uwaga od dokumentacji:

Porównano podaj wartości boolowskie: prawdziwe lub fałszywe.

Umieszczając części ekspresji w nawiasach, te części są najpierw oceniane i kończysz z porównaniem liczb całkowitych i booleanów.

2
Martijn Pieters 5 wrzesień 2012, 07:09