我见过两种在 Python 中创建无限循环的方法:
-
while 1: do_something()
-
while True: do_something()
这些有什么区别吗?一个比另一个更 python ?
最佳答案
基本上没关系,这些细节并不会真正影响某事物是否是“pythonic”。
但是,如果您对琐事感兴趣,则存在一些差异。
builtin boolean type didn't exist till Python 2.3所以打算在古代版本上运行的代码倾向于使用
while 1:
形式。例如,您会在标准库中看到它。True 和 False 内置命令是 not reserved words prior to Python 3所以可以分配给,改变他们的值(value)。这对上述情况有所帮助,因为代码可以执行
True = 1
以实现向后兼容性,但这意味着每次需要在全局字典中查找名称True
用过。由于上述限制,两个版本编译成的字节码在 Python 2 中是不同的,因为对常量整数进行了优化,它不能用于
True
。因为 Python 在编译1
时可以判断它始终为非零,所以它移除了条件跳转并且根本不加载常量:>>> import dis >>> def while_1(): ... while 1: ... pass ... >>> def while_true(): ... while True: ... pass ... >>> dis.dis(while_1) 2 0 SETUP_LOOP 5 (to 8) 3 >> 3 JUMP_ABSOLUTE 3 6 POP_TOP 7 POP_BLOCK >> 8 LOAD_CONST 0 (None) 11 RETURN_VALUE >>> dis.dis(while_true) 2 0 SETUP_LOOP 12 (to 15) >> 3 LOAD_GLOBAL 0 (True) 6 JUMP_IF_FALSE 4 (to 13) 9 POP_TOP 3 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 上运行,或者不需要担心循环的字节码计数,因此前者略胜一筹。
关于python - "while 1"和 "while True"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261987/