python 函数嵌套及作用域

函数可以嵌套吗?当然可以

 

 

 我们可以看到,外部函数outer_func()的函数体中嵌套了一个函数inner_func(),并且outer_func()体中
还调用了内部函数inner_func(),所以每当调用outer_func()的时候,都会调用一次inner_func(),我
们来看一下打印结果:

 

 我们可以看到,内部函数inner_func()被调用了。

 

其实,我们可能更加的关心作用域
我们看如下代码:

 

 首先,变量a是一个全局变量,变量b是一个局部变量,但需要注意的是该变量位于内部函数inner_func()的外面,
相当于是一个Enclosed的作用范围。所以,当函数内部要引用全局变量并修改全局变量时,需要用到关键字global,
内部函数需要用到外部函数的变量并修改时,需要用到关键字nonlocal.
关于变量作用域,可以参照LEGB原则
L:Local
E:Enclosed
G:Global
B:Build-in
那么当访问变量时,会先从Local(局部)寻找,若没有则去下一层Enclosed(闭包域,即外部函数的作用域)中寻找,
若仍然没有找到则去Global(全局)中寻找,最后去到Build-in(内置关键字)中寻找。

tips:小范围内可以访问大范围中的变量,注意是访问。如内部函数可以访问外部函数变量和全局变量,当反过来却
不行,如外部函数访问内部函数的变量。若要修改全局变量或者外部函数的变量,则需要对变量进行关键字修饰,如
对全局变量进行global 修饰,对外部函数的变量进行nonlocal修饰,这样就能明确应用的是变量是全局的还是外部函
数的。注意,对应可变变量(如列表,字典)来说,不需要进行global或nonlocal修饰,直接可以访问并修改



posted @ 2020-06-01 11:33  Leo_lsl  阅读(349)  评论(0编辑  收藏  举报