2017-09-01 39 views
2

我在網上遇到了這個問題,並在可視化工具上使用它,看看它是如何工作的。在我看來,使用for循環創建了一個名爲guess的新變量。Can for循環可以創建新變量嗎?

問題:for循環是否創建了一個名爲「guess」的新變量?如果不是,在if/else語句中,循環外部使用的猜測值如何?

cube = 8 

for guess in range(cube+1): 
    if guess**3 >= abs(cube): 
     break 
if guess**3 != abs(cube): 
    print(cube, "is not a perfect cube") 
else: 
    if cube < 0: 
     guess = -guess 
    print("The cube root of", str(cube), "is", str(guess)) 

我非常感謝這方面的一些反饋意見。謝謝!

+2

環路,'guess'是循環結束(或斷裂)之前計算的最後一個值 – PRMoureu

+2

https://stackoverflow.com/questions/10563613/does-python-officially-support外-reusing-a-loop-variable-after-the-loop和https://stackoverflow.com/questions/3611760/scoping-in-python-for-loops – TessellatingHeckler

回答

1

的Python正式承認(爲「索引變量」一個更正式嚴格名)定義爲循環目標的名稱漏入封閉函數範圍。

官方字 Python的參考文檔明確記載在section on for loops

的這種行爲循環,使分配到目標列表中的變量(一個或多個)。 [...]循環結束時,目標列表中的名稱不會被刪除,但如果序列爲空,它們根本不會被循環分配。

Read More Here

1

doc

當循環結束後在目標列表

名字不會被刪除, 但如果序列是空的,他們就不會被全部循環分配到 。

所以是的,for循環創建一個新的變量。

只有在for循環迭代爲空的情況下,纔會創建guess的唯一情況是,例如,

>>> for abcde in []: pass 
... 
>>> abcde 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'abcde' is not defined 

作爲相反:

>>> for abcde in [1]: pass 
... 
>>> abcde 
1