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

时间:2012-08-21 09:32:36

标签: python function scope behavior

  

可能重复:
  Python variable scope question
  Python nested function scopes

我对以下一段代码感到困惑

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

func()

在python 2.7中,当运行上面的代码时,python会给出错误UnboundLocalError,在func2中抱怨,当print a时,在分配之前引用'a'

但是,如果我在a=20中评论func2,一切顺利。 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
    }
}

可以非常清楚地区分本地和外部变量。

1 个答案:

答案 0 :(得分:1)

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

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