2011-02-09 4 views
1
if config == 'H/2' or 'H' or '2H': pass 
if config == 'H/2' or config == 'H' or config == '2H': pass 
+7

아니요. 왜 묻는 거니? 너 그거 해봤 니? –

+0

나는 그 (것)들을 시도했다, 동등하게 보였다. 그것은 나를 놀라게했다. 아마도 내 테스트는 충분히 철저하지 않았을 것입니다. – thenickname

+0

"나는 그들을 시험해 보았다"? 정말? 방법? –

답변

8
>>> config = 'H/2' 
>>> config == 'H/2' or 'H' or '2H' 
True 
>>> config == 'H/2' or config == 'H' or config == '2H' 
True 

>>> config = 'H' 
>>> config == 'H/2' or 'H' or '2H' 
'H' 
>>> config == 'H/2' or config == 'H' or config == '2H' 
True 

>>> config = 'R' 
>>> config == 'H/2' or 'H' or '2H' 
'H' 
>>> config == 'H/2' or config == 'H' or config == '2H' 
False 
+0

마지막 예는 나에게 이해가 가지 않습니다. 왜 비교 결과가 'H'를 반환합니까? – oosterwal

+1

또는 연산자가 반드시 bool로 변환되지는 않습니다. 도움말 ("또는")에서 : 'x 또는 y'표현식은 먼저 * x *를 평가합니다. * x *가 true의 경우는, 그 값이 돌려 주어집니다. 그렇지 않으면 * y *가 평가되고 결과 값이 리턴됩니다. 'and'도'or'도 값을 제한하지 않고 이'False'와'True'로 되돌아 가지 않고 마지막으로 평가 된 인수를 반환합니다. 예를 들어, 's'가 이 비어있는 경우 기본값으로 대체되어야하는 문자열 인 경우, 's 또는 'foo'' 표현은 원하는 값을 산출합니다. – DSM

+0

** 또는 ** 연산자는 bool로 변환되지 않습니다. 정의에 따라. 값은 그대로 유지됩니다. –

2

글쎄, 나는 그들이 (즉, 아무 일도 발생하지 않습니다에) 상응하는 것 같아요.

pass을 다른 것으로 바꾸면 첫 번째 조건부가 항상 실행되고 두 번째 조건부는 config 값에 따라 달라집니다.

아마도 당신이

if config in ['H/2', 'H', '2H']: 
    # do stuff 
    pass 
1

중 하나를 수행 쓰고 싶습니다

if config in ('H/2', 'H', '2H'): # more efficient than a list 
    do_something() 

또는 (당신이 값이 자주 또는 가능한 설정을하고 있다면 훨씬 더 크다) :

# once 
config_h_set = set(('H/2', 'H', '2H')) 

# later 
if config in config_h_set: 
    do_something()