嵌套函数的基本概念
-  
效率和封装:嵌套函数可以帮助组织代码,不仅提高代码的可读性,还能实现封装。外部函数可以定义一个清晰的接口,内部函数可以使用外部函数的上下文,但对外部不可见。
 -  
作用域:嵌套函数可以直接访问外部函数的局部变量。这是因为内部函数可以访问其所在作用域(即外部函数)的变量。
 
nonlocal 关键字的作用
 
在 Python 中,缺省情况下,嵌套函数只读外部函数的变量。如果你希望内部函数不仅读取,而且修改外部函数的变量,你需要使用 nonlocal 关键字。
如何使用 nonlocal
 
在你的代码示例中:
def outer():num = 10  # 外部函数的局部变量def inner():nonlocal num  # 声明 num 是在外部作用域num = 100     # 修改外部函数的 numprint(num)   # 打印修改后的 numinner()          # 调用内部函数print(num)      # 打印修改后的 numouter()
 
运行流程解析
-  
定义外部函数
outer:- 内部定义了一个局部变量 
num,并赋值为10。 - 定义了一个内部函数 
inner,该函数用nonlocal声明变量num,这表示该变量来自外部函数outer的作用域。 
 - 内部定义了一个局部变量 
 -  
调用内部函数
inner:- 当调用 
inner()时,执行内部函数,变量num的值被修改为100。因为用到了nonlocal,这个修改会影响外部outer函数中的num变量。 
 - 当调用 
 -  
打印结果:
inner函数打印num的值为100。- 返回到 
outer函数,再次打印num,此时打印的也是100,因为inner修改了它。 
 
注:在 Python 中,外部函数无法直接调用其内部嵌套函数。内部嵌套函数的作用域是限定在外部函数内部的,其生命周期和可见性仅限于外部函数
