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

在嵌套子函数中使用global声明变量无效的问题求解

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

你原来的代码失效是因为global关键字只针对全局作用域的变量,而first()里的x是first函数的局部变量,不属于全局,所以second()里的global x其实是新建了一个全局的x,根本碰不到first()里的那个变量。

要实现修改外层嵌套函数的变量,用nonlocal关键字代替global就可以了——它专门用来引用外层(非全局)函数作用域的变量:

def first():
    x = "hello"
    def second():
        nonlocal x  # 声明引用外层函数first的x
        x = "goodbye"
    second()
    print(x)  # 输出 goodbye,说明x被成功修改
first()

如果需要把修改后的值传递到外部,也可以让first()返回x:

def first():
    x = "hello"
    def second():
        nonlocal x
        x = "goodbye"
    second()
    return x

result = first()
print(result)  # 输出 goodbye

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:50:24