You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python切片操作引发UnboundLocalError,pop()正常的原因咨询

问题原因分析

这个差异完全是Python的变量作用域规则导致的,核心区别在于两种操作对变量的处理方式不同:

1. curr.pop() 为什么能正常运行

pop() 是列表的内置方法,它的作用是直接修改当前列表对象(删除最后一个元素),并没有重新给curr变量赋值。此时Python会默认在外部作用域(也就是exist函数的作用域)查找curr变量,找到后直接操作这个列表对象,不会把curr当成dfs函数的局部变量。

2. curr = curr[:-1] 为什么触发错误

curr[:-1] 是创建一个原列表的切片(去掉最后一个元素的新列表),然后执行curr = ...是给curr变量重新赋值,让它指向这个新创建的列表。

Python的规则是:如果函数内部有对变量的赋值语句,就会把这个变量标记为当前函数的局部变量。所以当dfs函数执行到开头的if (len(curr) >= len(word)):时,Python会认为curr是dfs的局部变量,但此时这个局部变量还没有被赋值(赋值语句在后面),因此触发UnboundLocalError。

解决方案

如果非要用切片的方式实现,只需要在dfs函数开头加上nonlocal curr声明,告诉Python这个变量来自外部函数的作用域,而不是局部变量:

def dfs(i, j):
    nonlocal curr  # 添加这一行
    if (i, j) in visited:
        return False
    # 后续代码不变

或者继续使用curr.pop(),因为它本身就是修改原列表对象,不需要额外声明。

内容的提问来源于stack exchange,提问作者Prateek Bhuwania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:40:48