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

Python中如何在嵌套函数内修改外层函数作用域的变量

问题原因

这里用错了作用域声明关键字:
global的作用是声明变量属于模块全局作用域,和外层嵌套函数f()的内部局部变量没有关联。在嵌套函数b()中写global a时,Python会把b()里操作的a识别为全局层面的独立变量,和f()内部定义的初始值为1的局部变量a是两个完全独立的对象。调用b()时修改的是全局空间的a,f()执行print(a)时读取的始终是自身作用域内的局部a,因此最终输出1,和预期结果不符。

修复方法

将b()内的global替换为nonlocal关键字即可。nonlocal是专门用于嵌套函数场景的关键字,作用是声明当前变量来自最近一层的外层嵌套函数作用域,对该变量的修改会直接同步到外层函数的对应变量上。
修复后的代码:

def f():
    a = 1
    def b():
        nonlocal a
        a = 2
    b()
    print(a)

f()

代码运行后会输出预期结果2。

两个关键字的适用场景
  • global:用于在函数内部修改模块全局作用域的变量
  • nonlocal:用于在内层嵌套函数中修改外层嵌套函数的局部变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:06:32