Can for循环可以创建新变量吗?

问题描述:

我在网上遇到了这个问题,并在可视化工具上使用它,看看它是如何工作的。在我看来,使用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://*.com/questions/10563613/does-python-officially-support外-reusing-a-loop-variable-after-the-loop和https://*.com/questions/3611760/scoping-in-python-for-loops – TessellatingHeckler

的Python正式承认(为“索引变量”一个更正式严格名)定义为循环目标的名称漏入封闭函数范围。

官方字 Python的参考文档明确记载在section on for loops

的这种行为循环,使分配到目标列表中的变量(一个或多个)。 [...]循环结束时,目标列表中的名称不会被删除,但如果序列为空,它们根本不会被循环分配。

Read More Here

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