学过python命名空间的都应该知道,当一个函数在执行时需要调用某个变量的时候,他会按照一定的顺序查找这个变量,如果找到就调用,找不到就报错NameError(一般情况下会报错提示你这个变量未被定义)。
一般的查找顺序是:(暂不讨论闭包等特殊情况)
函数内部临时变量→父函数临时变量(存在嵌套函数的情况)→模块内部变量(一般叫全局变量)→python内置变量
下面我们来看一些例子:
a = 1
def test():
a = 2
def inner():
a = 3
print(a)
inner()
test() #结果为3
a = 1
def test():
a = 2
def inner():
#a = 3
print(a)
inner()
test() #结果为2
a = 1
def test():
#a = 2
def inner():
#a = 3
print(a)
inner()
test() #结果为1
上面三段代码我想大部分人都能够理解,现在我们将代码改成下面的样子:
a = 1
def test():
a = 2
def inner():