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