考虑以下代码,我预计输出为 2,因为要打印的x
是函数范围内的局部变量inner
。但是,它打印了2
。我不明白为什么会这样。任何解释和/或评论不胜感激。
def outer():
x = 1
def inner():
x = 1
x += 1
print x
return x
这里有两个单独的x
变量:outer
函数有一个x
变量,inner
函数有自己的x
变量。
从函数中某处的变量赋值的那一刻起,该变量就具有局部范围。
所以当你打电话给outer()
时,你会返回1
。inner
函数中的x
是不同的,此外,从不调用inner()
。因此,不会打印(本地)x
。
如果你这样写:
def outer():
x = 3
def inner():
x = 1
x += 1
print x
return x
然后调用outer()
将返回3
。即使您在outer()
函数中调用inner()
,也不会有任何区别。由于inner()
函数中的x
是另一个,而不是outer()
函数中的(inner
中定义了局部作用域)。虽然这意味着你print 2
,但你会return 3
。