在 Python 中修改非全局、封闭作用域中的变量
使用嵌套函数时,通常需要访问和修改定义的变量在既不是全局的也不是通过动态作用域可访问的封闭作用域中。这可能会给实现词法作用域的 Python 带来挑战。
考虑以下示例:
def A(): b = 1 def B(): # Can access 'b' but cannot modify it directly print(b) B() A()
在此代码中,变量 b 是在 B() 的封闭作用域中定义的。功能。然而,尝试在 B() 中直接修改 b 会导致 UnboundLocalError,因为它没有声明为 B() 的本地错误。
为了解决这个问题,Python 提供了两种解决方案:
Python 3: 使用 nonlocal 关键字
在 Python 3 上,nonlocal 关键字允许您修改最近封闭中的变量范围不包括全局变量。使用方法如下:
def foo(): a = 1 def bar(): nonlocal a a = 2 bar() print(a) # Output: 2
在此示例中,nonlocal 关键字在 bar() 函数中创建一个非局部变量,从而可以对其进行修改。
Python 2 :使用可变对象
在Python 2上,nonlocal不可用,你可以使用可变对象,比如作为列表或字典。您可以改变对象的值,而不是重新分配变量:
def foo(): a = [] def bar(): a.append(1) bar() bar() print(a) # Output: [1, 1]
这里,a 变量是可变的,bar() 函数可以通过追加到列表来修改其值。
以上是如何在 Python 中修改非全局封闭作用域中的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!