Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python变量范围问题_Python_Python 2.7_Scope - Fatal编程技术网

Python变量范围问题

Python变量范围问题,python,python-2.7,scope,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>"

我的代码如下

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
3
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
文件“”,第2行,在测试中
UnboundLocalError:赋值前引用的局部变量“num”
我不知道为什么在测试方法中不能使用num。这对我来说很奇怪,我以前还没有面对过


注意:我使用的是Python2.7。

因为您在
test
函数中赋值给
num
,python认为它是一个局部变量。这就是为什么它抱怨您在分配局部变量之前引用了它

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

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

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

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

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

假设缩进正确,此代码可以工作。请再次检查您是否显示了引发此错误的确切代码,您可能在某个地方有输入错误。@delnan我在上次编辑时使用了num变量。希望它在代码中出错。你能看一下上面的代码吗?可能是重复的,现在很简单。如果您从一开始就包含了正确的代码(甚至只是异常消息),那么您会提前一个小时得到答案;-)酷,你的编辑让我投了反对票,因为我的答案不再有效。