a = 17
def test():
print(a)
a = 13
print(a)
test()
这是一条错误消息。
Traceback (most recent call last):
File "sandbox.py", line 6, in <module>
test()
File "sandbox.py", line 3, in test
print(a)
UnboundLocalError: local variable 'a' referenced before assignment
我希望此代码将打印出17 13,但出现错误。第一个print(a)将打印17,因为尚未执行a = 13,第二个print(a)将打印本地13,这是因为变量是从本地访问到全局的。
我的解释有什么问题?看来我有些误会..谢谢
答案 0 :(得分:2)
由于您的函数将a
定义为局部变量it is considered a local variable everywhere in the function。然后,您的第一个print
语句在初始分配变量之前先对其进行引用。
全局变量可能会造成混淆(以及对哪些函数进行更改的解释会更加复杂),并且最佳实践(在大多数语言中)是不使用它们。更好的样品配方可能是
def test(a):
print(a)
a = 13
print(a)
if __name__ == '__main__':
test(17)
答案 1 :(得分:0)
在访问函数内部的变量之前,必须使用global
关键字。有关更多参考,see this link
a = 17
def test():
global a
print(a)
a = 13
print(a)
test()