Python:名称空间,错误:局部变量' b'在分配之前引用

时间:2015-09-01 15:47:10

标签: python

此代码按预期工作:

    def my_fun():
        a = b
        a = 5
        print a

    b = 2
    my_fun()
    print b

我得到了:

5
2

但如果我这样做:

    def my_fun():
        a = b
        a = 5
        b = 1
        print a

    b = 2
    my_fun()
    print b

我收到错误:UnboundLocalError: local variable 'b' referenced before assignment

这里发生了什么?虽然函数可以看到b,但我无法在函数内部更改它?

1 个答案:

答案 0 :(得分:1)

当您指定b = 1时,解释器会开始将b视为局部变量。如果要分配全局变量b,则必须将语句global b放在函数的开头。

def my_fun():
    global b
    # do stuff

b = 2
my_fun()
print b