2012-01-21 2 views
3

가능한 중복 :
while (1) Vs. for while(True) — Why is there a difference?참 또는 1 동안?

"진정한 동안"나는 "일 동안"다른 사람의 코드에서 종종 볼 대신. 나는 True를 사용하는 것이 훨씬 더 파이썬적인 것이라고 생각하지만 실제로는 어떤 차이가 있는지 인지 확인하고 싶었다.

그래서 다음을 시도하고 결과는 놀랍습니다. 무엇에 대한 내가 볼 수있는 것처럼 그것은 통역사가 1 부울 변환을 최적화 할 수있는 것처럼 보입니다. 반면에 True가 아니라면, 내가 맞습니까? 의 반대입니다.

누구나 저에게 설명 할 수 있습니다, 아니면 내 결론이 잘못 되었나요? 불행하게도, 파이썬 2에서 나는이 작업을 수행 할 수 있기 때문에

def f1(): 
    while 1: 
     pass 

def f2(): 
    while True: 
     pass 

In [10]: dis.dis(f) 
2   0 SETUP_LOOP    3 (to 6) 

3  >> 3 JUMP_ABSOLUTE   3 
     >> 6 LOAD_CONST    0 (None) 
      9 RETURN_VALUE 

In [9]: dis.dis(f1) 
2   0 SETUP_LOOP    10 (to 13) 
     >> 3 LOAD_GLOBAL    0 (True) 
      6 POP_JUMP_IF_FALSE  12 

3   9 JUMP_ABSOLUTE   3 
     >> 12 POP_BLOCK 
     >> 13 LOAD_CONST    0 (None) 
      16 RETURN_VALUE 
+0

아마도 실제 코드가 통과하지 않기 때문에 결코 중요하지 않습니다. 따라서 가독성을 선호하십시오. –

답변

6

컴파일러는 True에 대한 참조를 최적화 할 수 없습니다

True = [] 
if not True: 
    print "oops" # :-(

다행스럽게도, 파이썬 3.2에서 내가 SyntaxError: assignment to keyword를 얻을.

관련 문제