1

可能重复:
Python 变量范围问题
Python 嵌套函数范围

我对以下代码感到困惑

def func():
    a=10
    def func2():
        print a
        a=20
    func2()
    print a

func()

在python 2.7中,运行上述代码时,python会报错UnboundLocalError,,抱怨在func2,当print a,'a'在赋值前被引用

但是,如果我发表评论a=20func2一切顺利。Python 将打印两行 10;即,以下代码是正确的。

def func():
    a=10
    def func2():
        print a

    func2()
    print a

func()

为什么?因为在其他语言中,比如 c/c++

{
    a=10
    {
        cout<<a<<endl //will give 10
        a=20          //here is another a
        cout<<a<<endl //here will give 20
    }
}

局部变量和外部变量可以很清楚地区分。

4

1 回答 1

1

通过添加 行a=20,Python 分析代码并看到它a也用作局部变量名称。在这种情况下,您尝试打印尚未定义的变量的值(在 中func2)。

如果没有该行,Python 将使用a范围 of 中的值func(在内部仍然有效func2)。您是正确的,这与您在 C/C++ 中的示例不同。

于 2012-08-21T09:36:03.020 回答