python函数可以嵌套使用,使用也比较简单,举个栗子:
def outer():
print("outer")
def inner():
print("inner")
inner()
outer()
## 运行结果:
outer
inner
nonlocal关键字:
与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局部变量,且始终找离当前最近的上层局部作用域中的变量。看栗子:
a = 1
def outer():
nonlocal a
a = 2
outer()
print(a)
结果:报错 SyntaxError: no binding for nonlocal 'a' found,
原因分析:nonlocal关键字是能作用域局部变量,当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,结果没找着,报错。
a = 1
def outer():
global a
a = 2
def inner():
nonlocal a
a = 3
inner()
print(a)
outer()
print(a)
结果:报错 SyntaxError: no binding for nonlocal 'a' found,
原因分析:当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,此时外层局部作用域虽然能找到变量a,但是这找到的 这个a 已经被global声明为全局变量了,所以报错。
a = 1
def outer():
a = 2
def inner():
nonlocal a
a = 3
def inner2():
print(a)
inner2()
print(a)
inner()
print(a)
outer()
print(a)
## 运行结果:
3
3
3
1