【python】全局变量与局部变量同名情况

700 阅读1分钟

引言

写代码时,可能会不小心写出如下代码:

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,但在函数域中出现赋值操作,其为函数中的局部变量,因此会引发异常。

结论

  1. 全局变量与局部变量可以同名,同时存在。
  2. 若希望函数域内引用全局变量,则需要注意函数阈内不能对该变量进行赋值操作,否则该变量值为局部变量。如需要则需要通过global方式使用。

在函数域内引用全局变量时需要注意: