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

时间:2017-09-01 04:47:43

标签: python algorithm python-3.x variables for-loop

我在网上遇到了这个问题,并在可视化工具上使用它来查看其工作原理。在我看来,使用for循环创建了一个名为guess的新变量。

问题: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 个答案:

答案 0 :(得分:1)

来自doc

  

循环结束后,目标列表中的名称不会被删除,   但如果序列为空,则不会将它们分配给   所有的循环。

所以是的,for循环创建了一个新变量。

唯一不会创建guess的情况是for循环迭代的序列是空的,例如。

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

答案 1 :(得分:1)

Python正式承认,为循环目标定义的名称(更正式的严格名称为&#34;索引变量&#34;)会泄漏到封闭的函数范围内。

官方消息 Python参考文档在section on for loops

中明确记录了这种行为
  

for循环对目标列表中的变量进行赋值。 [...]循环结束时不会删除目标列表中的名称,但如果序列为空,则循环中根本不会分配它们。

Read More Here

相关问题