嵌套函数中局部与非局部变量问题:代码运行异常原因解析
嵌套函数变量作用域问题解析
先看这段出问题的代码:
def f(): x = 1 def g(): print(x) x = 1 g() f()
这段代码运行会抛出UnboundLocalError: local variable 'x' referenced before assignment错误,原因很直接:
Python在编译嵌套函数g的时候,会扫描函数内部的所有变量赋值操作。当它发现x = 1这行代码时,会直接把x标记为g的局部变量,而不会去外层的f函数作用域查找x。但print(x)在x赋值之前就执行了,这时候局部变量x还没被定义,自然就报错了。
接下来看两种注释后能正常运行的情况:
- 注释掉
x=1:此时g函数内部没有对x的赋值操作,Python就会按照作用域链向外查找,找到外层f函数里定义的x=1,所以print(x)能正常输出1。 - 注释掉
print(x):此时g函数里只有x=1,x被标记为局部变量,赋值操作正常执行,不会有任何问题。
内容的提问来源于stack exchange,提问作者MOHOSHA
相关产品推荐
相关产品推荐

