Python奇怪的变量范围问题

时间:2013-11-18 11:52:59

标签: python python-2.7 scope

我的代码如下所示。

def test():
   print num1
   print num
   num += 10

if __name__ == '__main__':
   num = 0
   num1 = 3
   test()

执行上面的python代码时,我得到以下输出。

3 
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "<stdin>", line 2, in test
UnboundLocalError: local variable 'num' referenced before assignment

我不知道为什么测试方法中没有特别的数字。对我来说这很奇怪,我之前还没有面对过这个。

注意:我使用的是python 2.7。

2 个答案:

答案 0 :(得分:1)

由于您在num函数内分配test,因此python将其视为局部变量。这就是为什么它会在分配之前抱怨你引用局部变量。

您可以通过明确声明num为全局来解决此问题:

def test():
    global num
    print num1
    print num
    num += 10

if __name__ == '__main__':
    num = 0
    num1 = 3
    test()

答案 1 :(得分:1)

num出现在test定义内的赋值语句中。这使num成为局部变量。由于范围确定是在编译时进行的,因此即使在赋值之前的num语句中,print也是一个局部变量。那时,num没有值,导致错误。如果要访问全局值,则需要将num声明为全局值。 num1没有此问题,因为您永远不会尝试分配它。

def test():
    global num
    print num1
    print num
    num += 10