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 语句
在之前的讨论中,我们了解到嵌套函数能够引用包含它的函数作用域内的变量,即便该函数已经返回结果。而从 Python 3.x 版本开始(Python 2.x 不支持),若这些变量在 nonlocal 语句中声明,我们还能对其进行修改。借助 nonlocal 语句,嵌套的 def 语句可以读写包含它的函数中的变量,
超级会员免费看
订阅专栏 解锁全文
426

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



