while 1 与 while True 谁运行更快?

结论:
  • 分情况:
  • Python2 while 1 比 while True 快
  • Python3 因为True被作为关键字,所以一样快
分析:
  • 由于Python2中 True 不作为关键字,作为全局变量存在,需要一步加载到堆栈的操作LOAD_GLOBAL
  • 经过在同等条件下不严格测试,10分钟内 Python2使用 “while 1” 比 “while True” 多5亿次累加运算。
时间True1
60 sec398419371444008443
600 sec38842256884450119584
  • 随着Python2 退出逐渐退出历史舞台,应当使用Python3, 可以不用再顾忌此类问题。
验证:
  • python2:
>>> def f():
...     while 1:
...             pass
... 
>>> import dis
>>> dis.dis(f)
  2           0 SETUP_LOOP               4 (to 7)

  3     >>    3 JUMP_ABSOLUTE            3
              6 POP_BLOCK           
        >>    7 LOAD_CONST               0 (None)
             10 RETURN_VALUE        
>>> def f():
...     while True:
...             pass
... 
>>> dis.dis(f)
  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        
  • python3:
>>> import dis
>>> dis.dis(f)
  2           0 SETUP_LOOP               4 (to 7)

  3     >>    3 JUMP_ABSOLUTE            3
              6 POP_BLOCK

  4     >>    7 SETUP_LOOP               4 (to 14)

  5     >>   10 JUMP_ABSOLUTE           10
             13 POP_BLOCK
        >>   14 LOAD_CONST               0 (None)
             17 RETURN_VALUE
>>> def f():
...     while 1:
...             pass
... 
>>> dis.dis(f)
  2           0 SETUP_LOOP               4 (to 7)

  3     >>    3 JUMP_ABSOLUTE            3
              6 POP_BLOCK
        >>    7 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> True = 1
  File "<stdin>", line 1
SyntaxError: can't assign to keyword
>>> 
KeyboardInterrupt
>>> def f():
...     while True:
...             pass
... 
>>> dis.dis(f)
  2           0 SETUP_LOOP               4 (to 7)

  3     >>    3 JUMP_ABSOLUTE            3
              6 POP_BLOCK
        >>    7 LOAD_CONST               0 (None)
             10 RETURN_VALUE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spaceack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值