如果在循环之前num = 10,"for range in range(5)"为什么会有效?

Ste*_*ith 1 python

我得到了以下程序,我被要求写下它打印的内容:

num = 10
for num in range(5):
    print(num)
print(num)
Run Code Online (Sandbox Code Playgroud)

我的回答是:

10

我的理由是num已经被定义为10,所以它不能在范围内(0,5),所以我们可以跳过这个循环.然后,我们简单地写下num:10.

答案非常不同:

0
1
2
3
4
4
Run Code Online (Sandbox Code Playgroud)

这是怎么回事,最后一行怎么可能打印4,什么时候num被定义为10开始?

Moi*_*dri 5

当你这样做时:

for num in range(5):
    print(num)
Run Code Online (Sandbox Code Playgroud)

您分配给numvia 的值num = 10for循环覆盖.在循环中,您的num从0到4变化.当for循环结束时,它将值保持为4.当你执行print num打印时,在循环外打印,4因为它保持最后指定的值for.

  • @Eugene这不是"泄密":它长期以来一直是Python的一部分,循环不会创建新的范围.请参阅http://stackoverflow.com/questions/3611760/scoping-in-python-for-loops (4认同)
  • @Eugene:实际上并不是泄漏.它是python中的功能,循环没有自己的范围,也适用于*list comprehension*.但是,感谢您提及它,因为它可能对OP有用. (2认同)