Python中.append()与+=的区别及LeetCode78子集问题引用报错原因
报错核心原因:Python 的变量作用域绑定规则
- 当你在嵌套函数内仅对外层可变对象调用方法(比如
res.append(xxx))时,Python 会识别为你在操作外层作用域的已有变量,不会将其绑定为当前函数的局部变量。 +=在 Python 语法层面属于赋值类操作,哪怕列表的+=是原地修改的逻辑,只要在嵌套函数内出现了对变量的赋值类操作,Python 会默认将该变量标记为当前嵌套函数的局部变量。执行到这行代码时,Python 会优先找当前函数的局部变量,发现你在赋值前就引用了该变量,自然抛出UnboundLocalError。
简单复现代码
def outer(): res = [] def backtrack(): # 写法1:正常运行 # res.append([1,2]) # 写法2:直接报错,res被识别为backtrack的局部变量,未赋值就引用 res += [[1,2]] backtrack() return res outer()
解决方案
如果要保留+=的写法,只需要在回溯函数的第一行加nonlocal res声明,手动告知 Python 该变量不属于当前函数的局部作用域,去外层函数查找即可。
内容的提问来源于stack exchange,提问作者Noam
相关产品推荐
相关产品推荐

