可能重复:
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
}
}
可以非常清楚地区分本地和外部变量。
答案 0 :(得分:1)
通过添加行a=20
,Python会分析代码并看到a
也用作本地变量名。在这种情况下,您尝试打印尚未定义的变量的值(在func2
中)。
如果没有该行,Python将使用a
范围内的func
值(在func2
内仍然有效)。你是对的,这与你在C / C ++中的例子不同。