2012-12-10 5 views
28

이것이 내가하는 일이라고 생각합니까? 그렇습니다. 나는 확신하도록 요구하고있다.세 값의 평등 테스트

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

동일합니까? 액세스 번만 수행되므로

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

맞습니다. –

+0

다음 중 중복 된 항목 : http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

답변

25

그것은, 등가뿐만 같지 않다. 파이썬은 관계 연산자를 자연스럽게 연결합니다 (inis 포함).

약간의 차이를 보여줄 수있는 가장 쉬운 방법 :

>>> 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

문제를 해결할 수 있기 때문에 동일한 것은 아닙니다. 시나리오가 작동하고 다른 시나리오가 실패하는 시나리오 ('n'은 액세스 후에 n [i + 1]의 값을 변경하는 객체 임). 편집 : 나는 그 차이를 보여주는 예를 편집했다. –

3

예 ....

당신이 또한 올바른 할 수 있습니다

5 > x > 1 

또는

1 < x < 5 
6

그렇습니다. 그러나 비교 ns는 공통 표현에 연결되면 and을 두 번 평가하면 한 번 평가됩니다. 두 경우 모두에서, 제 2 비교는 제 한으로부터 실시 예 거짓인지를 평가하지 않은 docs :

비교는 < = Z가 동일하다 Y 예 <를 X, 임의로 사슬 수 에 X < Y 및 Y < = z. 단, y는 한 번만 계산됩니다 (단, 의 경우 x < y가 거짓 일 때 z가 평가되지 않습니다).

2

네, 파이썬의 내부에 진실도 거짓도 비교 연산자의 반환, 그들은 대신에 (그것은 아주 과거에 있었다, 클래스 이름을 기억할 수없는)이 '비교 결과'개체를 반환하고,이 객체는 을 제공합니다 _ _, _ 된다 _, _ 당량 _ 등 등 방법 및 최종 결과에 대한 '책임'가 (그리고 '비교 결과'LT의 단부에 참 또는 거짓으로 캐스팅 성명서). 그것은 의미 제어 파이썬이 여러분에게 제공하는 마법입니다 :