2012-01-21 6 views
3

Можно создать дубликат:
while (1) Vs. for while(True) — Why is there a difference?Пока True или пока 1?

я иногда вижу в других людей кода "а 1" вместо "в то время как True". Я думаю, что использование True более pythonic, но я хотел проверить, есть ли любая разница на практике.

Поэтому я попытался сделать следующее, и результат удивителен. Для чего Я вижу, что интерпретатор может оптимизировать 1 конвертирование 1 boolean , в то время как он не с 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.

Смежные вопросы