“ while 1”和“ while True”有什么区别?

“ while 1”和“ while True”有什么区别?,第1张

“ while 1”和“ while True”有什么区别?

从根本上讲,这并不重要,这样的细节并不会真正影响某些东西是否为“ pythonic”。

但是,如果您对琐事感兴趣,则有一些区别。

  1. 该内置布尔类型是不存在的,直到在Python 2.3,这样的目的是在古老的版本运行的代码往往使用的

    while 1:
    形式。例如,您将在标准库中看到它。

  2. True和False内置不是Python 3之前的保留字,因此可以分配给它们,以更改其值。这对上述情况有帮助,因为代码可以实现

    True = 1
    向后兼容,但是这意味着
    True
    每次使用该名称时都需要在globals字典中查找该名称。

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

    dis.dis(while_true)
    20 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上运行,也不必担心循环的字节码计数,因此前者在某种程度上是可取的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5642976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存