嵌套函数作用域中的未绑定局部变量
在 Python 中,嵌套函数访问其封闭作用域中定义的变量,从而实现代码重用和封装。但是,如果变量未声明为非本地或全局,则尝试修改嵌套函数内封闭范围内的变量可能会导致“UnboundLocalError”。
请考虑以下代码:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1</code>
当你调用inner()时,你会遇到“UnboundLocalError”,因为ctr没有在inner函数中定义。要解决此问题,您可以使用以下方法:
对于 Python 3 及更高版本:
使用 nonlocal 关键字
nonlocal 关键字允许您从嵌套函数中修改封闭范围内定义的变量。
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1</code>
对于 Python 2 及更早版本:
使用数据结构来保存变量
在 Python 2 中,嵌套函数无法修改封闭作用域中的变量,因此必须使用数据结构来保存变量并将其传递给嵌套函数。
<code class="python">def outer(): ctr = [0] def inner(): ctr[0] += 1</code>
替换所有出现的在代码中使用 ctr[0].
以上是Python 中的嵌套函数可以修改封闭作用域中的变量吗?的详细内容。更多信息请关注PHP中文网其他相关文章!