val = 9
def test(flag):
if flag:
val = 1
else:
print("test")
return val
if __name__ == '__main__':
ret = test(0)
print(ret)
显示UnboundLocalError: local variable 'val' referenced before assignment
但是代码改成下面这样
val = 9
def test():
return val
if __name__ == '__main__':
ret = test()
print(ret)
就不报错,但是这2者都是return val,没有区别呀,为什么?
我是参考这个地方实践的 https://www.cnblogs.com/fendo...。
val = 1
定义了一个新的变量,于是在函数中对val
的引用就不是全局的val
了,而是函数里那个val
。但是,在 return 的时候并没有对它赋值,于是就出错了。可以在函数里加一行
global val
,这样所有对val
的引用(包括val = 1
)就都是全局的了。python 3.3.7 文档 4.1. Naming and binding