用True还是用1?
我注意到,有些人的代码里用的是“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
的错误。