gpt4 book ai didi

python - "while 1"和 "while True"有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 20:35:47 27 4
gpt4 key购买 nike

我见过两种在 Python 中创建无限循环的方法:

  1. while 1:
    do_something()
  2. while True:
    do_something()

这些有什么区别吗?一个比另一个更 python ?

最佳答案

基本上没关系,这些细节并不会真正影响某事物是否是“pythonic”。

但是,如果您对琐事感兴趣,则存在一些差异。

  1. builtin boolean type didn't exist till Python 2.3所以打算在古代版本上运行的代码倾向于使用 while 1: 形式。例如,您会在标准库中看到它。

  2. True 和 False 内置命令是 not reserved words prior to Python 3所以可以分配给,改变他们的值(value)。这对上述情况有所帮助,因为代码可以执行 True = 1 以实现向后兼容性,但这意味着每次需要在全局字典中查找名称 True用过。

  3. 由于上述限制,两个版本编译成的字节码在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com