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

Python嵌套函数变量作用域疑问:res需用self.res而total无需?

问题原因解析

这个问题的核心是Python的变量作用域规则在起作用,具体可以拆成两点来看:

1. 赋值操作决定变量的作用域归属

Python有个关键规则:如果在函数内部对某个变量执行赋值操作(比如res = xxx),Python会默认把这个变量当成当前函数的局部变量,哪怕外层作用域已经有同名变量。

而如果只是读取变量的值(比如用total计算current * (total - current)),Python会按照「局部→嵌套→全局→内置」的顺序往上查找变量,找到外层的同名变量就直接用,不会报错。

2. total和res的使用差异

  • total的情况:你代码里的total应该只是在嵌套函数(比如dfs)里被读取,没有执行赋值操作(比如total = xxx)。所以Python会自动从外层作用域找到你定义的total变量,正常使用,不会有问题。
  • res的情况:改成局部变量后,你在嵌套函数里会执行res = max(res, ...)这样的赋值操作。这时候Python会把res标记为嵌套函数的局部变量,但第一次执行max(res, ...)时,局部的res还没被定义(你是在这行代码里才第一次给它赋值),自然就触发了UnboundLocalError——相当于你在使用一个还没声明的局部变量。

怎么解决?

如果想在嵌套函数里修改外层的局部变量res,只需要在嵌套函数开头加一句nonlocal res,告诉Python:这个res不是当前函数的局部变量,而是来自外层作用域的变量。这样Python就会正确找到外层的res,既可以读取也可以修改,不会再报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:45:38