关于Python中另一个函数内部的函数

About function inside another function in Python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python variable scope question
Python nested function scopes

我对下面的代码感到困惑

1
2
3
4
5
6
7
8
9
def func():
    a=10
    def func2():
        print a
        a=20
    func2()
    print a

func()

在python 2.7中,当运行上述代码时,python会给出错误,UnboundLocalError,在func2中抱怨,当print a在赋值之前引用了'a'。

但是,如果我在func2中评论a=20,一切都很顺利。python将打印两行10,即以下代码是正确的。

1
2
3
4
5
6
7
8
9
def func():
    a=10
    def func2():
        print a

    func2()
    print a

func()

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

1
2
3
4
5
6
7
8
{
    a=10
    {
        cout<<a<<endl //will give 10
        a=20          //here is another a
        cout<<a<<endl //here will give 20
    }
}

局部变量和外部变量可以很清楚地分辨出来。


通过添加行a=20,python分析代码,发现a也用作局部变量名。在这种情况下,您试图打印尚未定义的变量的值(在func2中)。

如果没有这一行,python将使用func范围内的a值(在func2内仍然有效)。你是正确的,这与你在C/C++中的例子不同。