2014-01-29 34 views
-1
while 1:1 

以上代碼的輸出是什麼?有沒有辦法檢查上面的循環是做什麼或沒有做什麼?一種方法是在while循環進入人體的打印語句,如:下面的無限循環是做什麼的?

while 1: 
    1 
    print "2" 

但是,不輸入任何while循環,我們可以檢查身體新的循環至少做什麼?

+1

你是什麼意思的「做事」?只要程序沒有退出,很明顯它正在執行* something *:循環。你還在尋找什麼其他類型的動作? – Dolda2000

+0

也許你可以看看任務管理器並查看進程的資源?很顯然,如果您允許寫入的唯一代碼是「while 1:1」,那麼您將需要查看除IDLE Gui或python輸出以外的其他位置。 – chase

回答

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   
>>> 

所以你可以看到,它只是什麼都不做除了循環。

老實說,我很驚訝,它甚至沒有加載給定值的地方。

+0

我想,加載一個不可變的全球,然後不存儲在任何地方是一個簡單的事情來優化... – mgilson

+0

這很有趣,尤其是在閱讀本[問題](http://stackoverflow.com/questions/21260745/what-發生 - 如果任您寫一個變量名單獨式的Python)。使用變量名稱時,它們被推入堆棧並立即彈出。 – jayelm

+0

@mgilson是的,但我不習慣Python優化任何東西...... – glglgl

1

循環當然是在做某件事,儘管可以說沒有用。如果你在交互式shell中,輸出是無窮無盡的1 s。在腳本中,不會有輸出。

在Python中,1計算結果爲True,所以while循環類似於while True:

試試這個:

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

,你會發現第二行從未打印。

2

你似乎在某種誤解之下勞動。我不知道我是否正確地解釋了你,但是在正常情況下,你寫的程序甚至沒有「不做任何事情」的選擇:它是計算機的一個基本方面,它不斷地執行指令。

如果你在硬件級別編程,在那裏你可以告訴CPU暫停,那麼真正讓電腦「不做任何事情」的唯一方法是,但在一般的體系結構中,只有內核才能訪問這樣的特權指令和像Python這樣的高級編程語言不會暴露它們。

你可以爲了都不做,在用戶程序的級別做的,就是讓內核不安排你的過程中,如通過執行調用sleep,或阻塞I/O調用或類似的。因爲你沒有明確地做這樣的事情,所以除了執行之外,你的程序是沒有別的選擇的。要求「驗證」它是否在做某事就像要求驗證1 + 1 = 2:根據定義,這是真的。