以下无限循环有什么作用?

时间:2014-01-29 05:13:13

标签: python infinite-loop

while 1:1

上述代码的输出是什么?有没有办法检查上面的循环是做什么或什么都没有?一种方法是在while循环体中输入print语句,如:

while 1:
  1
  print "2"

但是,如果没有在while循环体中输入任何新内容,我们可以检查循环是否至少在做某事吗?

3 个答案:

答案 0 :(得分:5)

您可以这样检查:

>>> def f():
...   while True: 42
... 
>>> 
>>> import dis
>>> dis.dis(f)
  2           0 SETUP_LOOP              10 (to 13)
        >>    3 LOAD_GLOBAL              0 (True)
              6 POP_JUMP_IF_FALSE       12
              9 JUMP_ABSOLUTE            3
        >>   12 POP_BLOCK           
        >>   13 LOAD_CONST               0 (None)
             16 RETURN_VALUE        
>>> 

所以你可以看到,除了循环之外它什么也没做。

说实话,我很惊讶它甚至没有在某处加载给定的值。

答案 1 :(得分:2)

你似乎在某种误解下工作。我不知道我是否正确地解释了你,但在正常情况下,你编写的程序甚至不能选择“做某事”:计算机的一个基本方面就是不断执行指令

你真正让计算机“不做任何事情”的唯一方法就是如果你在硬件级编程,你可以告诉CPU停止,但在正常的架构上,只有内核可以访问这样的特权指令和像Python这样的高级编程语言不会暴露它们。

在用户程序级别,为了不执行任何操作,您可以做的是要求内核不安排您的进程,例如执行对sleep的调用,或阻止I / O呼叫等。但是,由于您没有明确地执行任何此类操作,除了执行之外,您的程序没有其他选择。要求“验证”它是否正在做某事就像要求验证1 + 1 = 2:根据定义,这是真的。

答案 2 :(得分:1)

循环肯定是做某事,尽管可能没什么用处。如果您在交互式shell中,则输出是1的源源不断的。在脚本中,没有输出。

在python中,1评估为True,因此while循环类似于while True:

试试这个:

print "While loop starting!"
while 1:1
print "While loop has finished!"

你会发现第二行永远不会打印出来。