5

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

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

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

为什么i保持全局变量?

4

2 回答 2

9

细节决定成败

命名和绑定

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

或者简单地说,afor loop不是块

范围定义了名称在块中的可见性。如果在块中定义了局部变量,则其范围包括该块。如果定义出现在功能块中,则范围扩展到包含在定义块中的任何块,除非包含的块为名称引入了不同的绑定。

function因此,定义的任何变量从定义点到块、module或定义的范围结束都是可见的class

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

根据命名法的说法,i如果您突出显示的代码是模块的一部分而不是定义的函数,我将调用一个全局变量。

于 2013-10-11T11:35:38.180 回答
1

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

于 2013-10-11T11:28:53.780 回答