用True还是用1?

3 投票
1 回答
1732 浏览
提问于 2025-04-17 10:46

可能重复的问题:
while (1) 和 for while(True) — 这两者有什么区别?

我注意到,有些人的代码里用的是“while 1”,而不是“while True”。我觉得用 True 更符合 Python 的风格,但我想确认一下这两者在实际使用中有没有区别。

于是我尝试了一下,结果让我很惊讶。根据我的观察,解释器似乎能优化掉 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

1 个回答

6

编译器无法优化掉对 True 的引用,因为在 Python 2 中,我可以这样做:

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

幸运的是,在 Python 3.2 中,如果我这样做,就会出现 SyntaxError: assignment to keyword 的错误。

撰写回答