关于变量范围?

时间:2013-10-11 11:26:09

标签: python

我今天进行了数学测试,测试中有一个额外的学分问题是

product = 1
for i in range(1,7,2):
    print i
    product = product * i
print i
print product

我们应该列出循环的步骤,这很容易;但它让我思考,为什么这个程序运行?第二个print i对我来说似乎不合适。我认为i仅存在于for循环中然后被破坏,所以当你调用第二个print i时,没有变量i并且你得到一个错误。

为什么i仍然是全局变量?

2 个答案:

答案 0 :(得分:9)

魔鬼在细节中

Naming and binding

  

块是一段Python程序文本,作为一个单元执行。   以下是块:模块,函数体和类   定义

或者简单来说,for loop不是块

  

范围定义块中名称的可见性。如果是当地的   变量在块中定义,其范围包括该块。如果   定义发生在功能块中,范围扩展到任何块   包含在定义的内容中,除非包含的块引入   名称的不同绑定。

因此,从定义点到块的范围结束,functionmoduleclass定义,可以看到定义的任何变量。

  

为什么我仍然是一个全局变量?

从命名法的说法,如果突出显示的代码是模块的一部分而不是定义的函数,我会将i称为全局变量。

答案 1 :(得分:1)

Python没有块范围。函数中定义的任何变量仅从该点可见,直到函数结束。