2012-01-21 48 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