从根本上讲,这并不重要,这样的细节并不会真正影响某些东西是否为“ pythonic”。
但是,如果您对琐事感兴趣,则有一些区别。
该内置布尔类型是不存在的,直到在Python 2.3,这样的目的是在古老的版本运行的代码往往使用的
while 1:
形式。例如,您将在标准库中看到它。True和False内置不是Python 3之前的保留字,因此可以分配给它们,以更改其值。这对上述情况有帮助,因为代码可以实现
True = 1
向后兼容,但是这意味着True
每次使用该名称时都需要在globals字典中查找该名称。由于上述限制,两个版本编译的字节码在Python 2中是不同的,因为存在不能用于的常量整数的优化
True
。因为Python可以在编译时告知1
其始终非零,所以它消除了条件跳转,并且根本不会加载常量:>>> import dis
def while_1():
… while 1:
… pass
…
def while_true():
… while True:
… pass
…
dis.dis(while_1)
20 SETUP_LOOP 5 (to 8)3 >> 3 JUMP_ABSOLUTE 3
6 POP_TOP
7 POP_BLOCK
>> 8 LOAD_ConST 0 (None)
11 RETURN_VALUEdis.dis(while_true)
20 SETUP_LOOP 12 (to 15)
>> 3 LOAD_GLOBAL 0 (True)
6 JUMP_IF_FALSE 4 (to 13)
9 POP_TOP3 10 JUMP_ABSOLUTE 3
>> 13 POP_TOP
14 POP_BLOCK
>> 15 LOAD_ConST 0 (None)
18 RETURN_VALUE
因此,
while True:它有点容易阅读,并且
while 1:对旧版本的Python有点友善。由于这些天您不太可能需要在Python
2.2上运行,也不必担心循环的字节码计数,因此前者在某种程度上是可取的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)