Python 是真的还是1?

Python 是真的还是1?,python,interpreter,bytecode,Python,Interpreter,Bytecode,可能重复: 我有时在别人的代码中看到“while1”而不是“whiletrue”。 我认为使用True更像python,但我想检查一下是否有 实践中的任何差异 所以我试着做了以下几点,结果令人惊讶。为了什么? 我可以看到解释器似乎可以优化1布尔值 转换,虽然它不与真实,与我的相反 应该是 任何人都可以解释为什么会这样,或者我的结论是错误的 def f1(): while 1: pass def f2(): while True: pass I

可能重复:

我有时在别人的代码中看到“while1”而不是“whiletrue”。 我认为使用True更像python,但我想检查一下是否有 实践中的任何差异

所以我试着做了以下几点,结果令人惊讶。为了什么? 我可以看到解释器似乎可以优化1布尔值 转换,虽然它不与真实,与我的相反 应该是

任何人都可以解释为什么会这样,或者我的结论是错误的

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

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

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

幸运的是,在Python3.2中,我得到了
SyntaxError:assignment to keyword

,这并不重要,因为可能真正的代码不会通过。所以我更喜欢可读性。