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

如何让Python嵌套内部函数访问外部函数的不可变变量?

解决嵌套函数修改外部变量的问题

这事儿其实挺常见的,你遇到的核心问题是:不可变类型变量(比如整数、字符串)在嵌套函数里默认是只读的,而像列表这种可变类型,你修改它的内部元素时并没有重新赋值,所以能生效。要让函数B能修改A里的d,最简便直接的办法就是用nonlocal关键字,我给你一步步说明:

方法1:使用nonlocal关键字(推荐)

nonlocal专门用来告诉Python:“这个变量不是我内部定义的,而是来自外层嵌套函数的作用域,我要修改它”。修改后的代码如下:

def A():
    def B():
        nonlocal d  # 声明d来自外层嵌套作用域
        c.append("hello")
        d = 8  # 现在可以直接修改A里的d了
    c = []
    d = 0
    B()
    print(c, d)  # 输出:["hello", 8]

运行这段代码,就能得到你想要的结果——d被成功修改为8了。

方法2:把d放进可变对象里(兼容旧版Python)

如果你用的是Python 2(现在不太推荐了),没有nonlocal关键字,那可以像处理c一样,把d放到一个列表里,因为列表是可变类型,修改它的元素不需要重新赋值:

def A():
    def B():
        c.append("hello")
        d[0] = 8  # 修改列表里的元素
    c = []
    d = [0]  # 把d包装成列表
    B()
    print(c, d[0])  # 输出:["hello", 8]

不过这个方法需要额外的包装,不如nonlocal直观,所以还是优先用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:12:46