我在网上遇到了这个问题,并在可视化工具上使用它来查看其工作原理。在我看来,使用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))
我非常感谢对此的一些反馈。谢谢!
答案 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循环对目标列表中的变量进行赋值。 [...]循环结束时不会删除目标列表中的名称,但如果序列为空,则循环中根本不会分配它们。