嵌套函数的基本概念
-
效率和封装:嵌套函数可以帮助组织代码,不仅提高代码的可读性,还能实现封装。外部函数可以定义一个清晰的接口,内部函数可以使用外部函数的上下文,但对外部不可见。
-
作用域:嵌套函数可以直接访问外部函数的局部变量。这是因为内部函数可以访问其所在作用域(即外部函数)的变量。
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 中,外部函数无法直接调用其内部嵌套函数。内部嵌套函数的作用域是限定在外部函数内部的,其生命周期和可见性仅限于外部函数
