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

标签 python function scope behavior

Possible Duplicate:
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=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
    }
}

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

最佳答案

通过添加行a=20,Python分析代码并发现a也被用作局部变量名。在这种情况下,您尝试打印尚 undefined variable 的值(在 func2 中)。

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

关于python - 关于Python中另一个函数内部的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051987/

相关文章:

python - 如何使用python复制文件,重新创建目录结构?

Python 套接字错误 300 'Moved Permanently'

php - 函数多次只返回一个值

javascript - 使用 .apply( ) 并传递相同的实例作为上下文是否有意义?

javascript - 在 JavaScript 函数中定义全局变量

c++ - 如何调用在 main() 内部但在外部范围内定义的变量

python - Django 日期时间问题(默认=datetime.now())

c++ - 指向常量数组的指针的正确定义是什么?

python - 为什么在循环变量使用相同名称时列表会被最后一项覆盖?

python - MySQL 的 read_sql() 非常慢