2012-01-21 42 views
3

可能重複:
while (1) Vs. for while(True) — Why is there a difference?雖然是真的還是1?

我有時看到別人的代碼 「而1」,而不是 「而真」。 我認爲使用True更pythonic,但我想檢查是否有 在實踐中的任何差異。

所以我試圖做到以下幾點,結果令人驚訝。對於 我可以看到,它看起來像解釋器可以優化1布爾 轉換,而它不與True,這與我所設想的相反。

任何人都可以解釋爲什麼,或者可能是我的結論錯誤?

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因爲,不幸的是,在Python 2我可以這樣做:

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

幸運的是,在Python 3.2我得到SyntaxError: assignment to keyword