说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
nonlocal 语句是 Python 3 中引入的一种机制,用于在嵌套函数中声明一个变量来自于最近的外层(但不是全局的)作用域。它允许你在嵌套函数内部修改外层函数中的变量。nonlocal 语句通常在闭包(closure)中使用,闭包是指一个函数对象,它能记住定义它的作用域中的变量。
语法如下:
nonlocal var_name
nonlocal var_name1 var_name2
其中 var_name 是你想要声明为非局部变量的变量名。
当一个函数或类的定义嵌套(被包围)在其他函数的定义中时,其非局部作用域就是包围它的函数的局部作用域 。 nonlocal 语句会使其所列出的标识符指向之前在非局部作用域中绑定的名称。 它允许封装的代码重新绑定这样的非局部标识符。 如果一个名称在多个非局部作用域中都被绑定,则会使用最近的绑定。 如果一个名称在任何非局部作用域中都未被绑定,或者不存在非局部作用域,则会引发 SyntaxError。
nonlocal 语句的作用范围是整个函数或类语句体。 如果一个变量在本作用域的 nonlocal 声明之前被使用或赋值则会引发 SyntaxError。
参见 PEP 3104 - 访问外层作用域中的名称,有关 nonlocal 语句的规范说明。
程序员注意事项: nonlocal 是对解析器的指令并且仅会在与其一同被解析的代码上应用。 参见 global 语句的相关注意事项。
示例如下:
def outer_function():
x = 10
def inner_function():
nonlocal x # 声明 x 是外层函数中的变量
x = 20 # 修改外层函数中的 x
inner_function()
print("外层函数中的 x:", x) # 输出 20
outer_function()
在这个示例中:
在嵌套函数中,如果没有 nonlocal 语句,Python 会认为所有在嵌套函数中赋值的变量都是局部变量。这意味着你不能直接修改外层函数的局部变量。
def outer_function():
x = 10
def inner_function():
x = 20 # 创建一个新的局部变量 x,不会影响外层函数的 x
print("内部函数中的 x:", x) # 输出 20
inner_function()
print("外层函数中的 x:", x) # 输出 10
outer_function()
在这个例子中,inner_function 中的 x 是一个新的局部变量,外层函数 x 的值不会被修改。
nonlocal 语句只能在嵌套函数中使用,用于声明最靠近的外层函数中的变量。使用 nonlocal 时,确保外层函数中已经定义了该变量,否则会引发 SyntaxError。
global 与 nonlocal:
示例对比
# 使用 global
x = 10
def global_function():
global x
x = 20
global_function()
print("全局变量 x:", x) # 输出 20
# 使用 nonlocal
def outer_function():
x = 10
def inner_function():
nonlocal x
x = 20
inner_function()
print("外层函数中的 x:", x) # 输出 20
outer_function()
global 和 nonlocal 各有各的应用场景,根据需要修改的变量的作用域选择适当的语句。
更新时间:June 8, 2024, 7:13 p.m. 标签:python nonlocal 数字