在Python中,如果想函数内部对函数外的变量进行操作,有一些问题(一些在Java,C中再正常不过的操作这里就不行)
正常情况下,在函数外定义的变量是可以直接在函数体内部访问使用的,比如
a = 3
def f():
print(a)
如果我们在函数中定义一个同名的局部变量,那么函数会优先使用局部变量,对全局变量不会造成影响。
a = 100
def test():
a = 200
print(a)
test()
print(a)
200
100
然而,如果我们想 在函数中修改函数外变量 就会出现问题
a = 100
def test():
a = a * 3
print(a)
test()
# UnboundLocalError: local variable 'a' referenced before assignment
这是因为,a = a * 3是一条赋值语句,Python解释器会将 a 认作局部变量,所以 a * 3 因为 a 这个局部变量还没有定义,而抛出这样的错误。
那应该怎么做呢?
在函数中用global声明,告诉python这个变量是全局变量。该声明仅在当前代码块中有效。
a = 100
def test():
global a
a = a * 3
print(a)
test()
# 300
参考资料