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

Python嵌套函数中如何引用修改上一层函数的局部变量?

解决方案

你需要的能力Python已经原生支持,使用nonlocal关键字即可实现,修改后代码如下:

x = 0
def f():
    c = 2      
    def g():
        # 声明c来自上一层非全局作用域
        nonlocal c
        c = 4
        print(c) # 输出4
    g()
    print(c) # 输出4,验证g中修改的就是f里的c变量
f()

原理解释

  • nonlocal关键字的作用就是声明当前变量不属于当前函数的局部作用域,也不属于最外层的全局作用域,而是向上追溯最近一层嵌套父函数的作用域中的同名变量,完全匹配你提到的「不直接跳转到全局作用域,只向上访问指定层级作用域变量」的需求。
  • 两个关键字的差异对比:
    • global:强制绑定最外层全局作用域的变量,无视所有嵌套层级
    • nonlocal:绑定最近一层非全局的父作用域变量,不会触及全局作用域

注意事项

  • nonlocal只能在嵌套函数内部使用,在全局作用域或者最外层函数中声明会触发语法错误
  • 如果存在多层嵌套,nonlocal只会匹配最近一层父作用域的同名变量,如果你需要访问更上层嵌套的变量,需要中间层级的函数也对目标变量做nonlocal声明
  • Python 2版本没有nonlocal关键字,这类场景可以通过可变容器曲线实现:比如将父函数的变量存在列表、字典这类可变对象中,内层函数直接修改可变对象的内部值即可,不需要重新绑定变量名,示例如下:
# Python 2兼容写法
def f():
    c = [2]    
    def g():
        c[0] = 4
        print(c[0])
    g()
    print(c[0])
f()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:15:00