我今天进行了数学测试,测试中有一个额外的学分问题是
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
仍然是全局变量?
答案 0 :(得分:9)
魔鬼在细节中
块是一段Python程序文本,作为一个单元执行。 以下是块:模块,函数体和类 定义
或者简单来说,for loop
不是块
范围定义块中名称的可见性。如果是当地的 变量在块中定义,其范围包括该块。如果 定义发生在功能块中,范围扩展到任何块 包含在定义的内容中,除非包含的块引入 名称的不同绑定。
因此,从定义点到块的范围结束,function
,module
或class
定义,可以看到定义的任何变量。
为什么我仍然是一个全局变量?
从命名法的说法,如果突出显示的代码是模块的一部分而不是定义的函数,我会将i
称为全局变量。
答案 1 :(得分:1)
Python没有块范围。函数中定义的任何变量仅从该点可见,直到函数结束。