while 1:1
上述代码的输出是什么?有没有办法检查上面的循环是做什么或什么都没有?一种方法是在while循环体中输入print语句,如:
while 1:
1
print "2"
但是,如果没有在while循环体中输入任何新内容,我们可以检查循环是否至少在做某事吗?
答案 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!"
你会发现第二行永远不会打印出来。