在 Python 中,函数内的变量通常属于局部作用域,除非显式声明为全局变量。但是,有时需要修改外部(封闭)但非全局范围中定义的变量。这个问题探讨了如何实现这一点。
给出示例代码:
def A(): b = 1 def B(): # Access to 'b' is possible here. print(b) # Direct modification of 'b' fails. B() A()
函数 B 中的变量 b 驻留在非全局封闭范围内。尝试直接修改 b 会导致 UnboundLocalError。不能使用 global 关键字,因为 b 没有在全局级别声明。
Python 3 解决方案:
非局部作用域 (Python 3.x) 可以是用于解决此问题:
def A(): b = 1 def B(): nonlocal b # Nonlocal keyword b = 2 B() print(b) # Output: 2 A()
Python 2解决方案:
可变对象(Python 2.x):
不要直接重新分配变量,而是使用可变对象(例如列表、字典)并改变它们的值:
def A(): b = [] def B(): b.append(1) # Mutation of 'b' B() B() print(b) # Output: [1, 1] A()
以上是如何在Python中修改外部作用域中的非全局变量?的详细内容。更多信息请关注PHP中文网其他相关文章!