Python 3.x 中的 nonlocal 语句详解
1. 嵌套作用域概述
在 Python 里,作用域可以任意嵌套。不过在引用名称时,只会搜索包含该函数的 def 语句(而非类)。例如:
def f1():
x = 99
def f2():
def f3():
print(x) # 在 f1 的局部作用域中找到!
f3()
f2()
f1()
上述代码输出为 99 。Python 会在检查函数的局部作用域之后、检查模块的全局作用域之前,从内到外搜索包含该函数的所有 def 语句的局部作用域。但在实际编程中,这种代码并不常见。因为在 Python 里,扁平结构优于嵌套结构,即便引入了嵌套作用域,这一原则仍然适用。尽量减少嵌套函数定义的数量,会让开发和协作更加轻松。
2. Python 3.x 中的 nonlocal 语句
2.1 nonlocal 语句简介
从 Python 3.x 开始(Python 2.x 不支持),引入了 nonlocal 语句,它允许嵌套的 def 语句读写包含它的函数作用域中的变量。这使得嵌套作用域的闭包更加实用,能提供可修改的状态信息。
nonlocal 语句在形式和用途上与 global 语句很
超级会员免费看
订阅专栏 解锁全文
397

被折叠的 条评论
为什么被折叠?



