引言
写代码时,可能会不小心写出如下代码:
a = 0
def foo():
if a == 0:
print("success")
a = 1
foo()
看起来没什么问题,实际上会引发如下异常:
UnboundLocalError: local variable 'a' referenced before assignment
当我们注释掉第7行
a = 0
def foo():
if a == 0:
print("success")
foo()
可以正常运行
原理
在函数foo中,对于变量名a,若其没有赋值操作,其表示的是全局变量a,但在函数域中出现赋值操作,其为函数中的局部变量,因此会引发异常。
结论
- 全局变量与局部变量可以同名,同时存在。
- 若希望函数域内引用全局变量,则需要注意函数阈内不能对该变量进行赋值操作,否则该变量值为局部变量。如需要则需要通过
global方式使用。
在函数域内引用全局变量时需要注意: