Python的变量作用域的意外行为

19 浏览
0 Comments

Python的变量作用域的意外行为

我对Python的变量作用域系统如何工作有些困惑。比如,我有这样一种情况:

a = 10
def test():
    print(a)

然后一切都按照我的预期进行。Python首先查找一个局部变量a,找不到它,然后查找一个全局变量。

然而,在这样一种情况下:

a = 10
def test():
    print(a)
    a += 1
    print(a)

Python抛出了一个UnboundLocalError异常,显然是源自第3行(print(a))。对我来说,至少在这一行之前,什么都没有改变,我不明白为什么会出现异常。

0
0 Comments

Python中变量的作用域行为出现意外的原因是因为Python没有变量声明。因此,在函数的作用域内的每个变量赋值都被视为局部变量。所以,你总是需要明确指定该变量是全局的。然而,推荐使用global是一个不好的主意。

0