2012-12-10 14 views
28

Czy robi to, co myślę, że robi? Wydaje mi się, że tak. Proszę, bądź pewien.Testowanie równości trzech wartości

if n[i] == n[i+1] == n[i+2]: 
    return True 

Czy są one równe?

if n[i] == n[i+1] and n[i+1] == n[i+2]: 
    return True 
+2

To prawda. –

+0

Powiel: http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

Odpowiedz

25

Jest równoważne się jednak nie równa, ponieważ dostępy są wykonywane tylko raz. Operatory relacyjne łańcuchów Pythona w sposób naturalny (w tym in i is).

Najłatwiej pokazać niewielką różnicę:

>>> print(1) == print(2) == print(3) 
1 
2 
3 
True 
>>> print(1) == print(2) and print(2) == print(3) 
1 
2 
2 
3 
True 
+3

Warto zauważyć, że nie są one takie same, jak to możliwe, aby wymyślić scenariusz, w którym jeden działa, a drugi się nie powiedzie ('n' jest obiektem, który zmienia wartość' n [i + 1] 'po uzyskaniu dostępu). Edytuj: Edytowałem w przykładzie, aby pokazać różnicę. –

3

tak masz rację ....

można również zrobić

5 > x > 1 

lub

1 < x < 5 
6

Tak, jednak, gdy porównanie ns są powiązane wspólne wyrażenie jest oceniany raz, przy użyciu and jest oceniane dwukrotnie. W obu przypadkach drugie porównanie nie jest analizowany, czy pierwsza jest fałszywy, przykład z docs:

Porównania mogą być dowolnie łączone, na przykład, x < Y < = Z odpowiada -X < y i y < = z, z tym wyjątkiem, że y jest oceniane tylko raz (ale w obu przypadkach z nie jest w ogóle analizowane, gdy x < y zostanie uznane za fałszywe).

2

Tak, na wewnętrznych pytona za operatory porównania powraca ani prawdziwe ani fałszywe, ale zamiast zwrócić obiekt „porównanie wynik” (nie pamiętam nazwy klasy, było całkiem w przeszłości), a obiekt ten zapewnia _ LT _, _ GT _, _ równoważnika _ itd itp metody i stają się „odpowiedzialny” dla końcowego (i „wynik porównania” odlewania do prawda lub Fałsz na koniec komunikat). To magia semantycznej kontroli Pythona zapewnia :)

Powiązane problemy