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

Python嵌套函数内修改外层函数局部变量的实现方法

问题根因

原代码的作用域声明写错了:内层hi()函数里的global x,会让Python把x识别为模块全局作用域的变量,和myfunc内部一开始定义的局部变量x完全是两个互不干扰的变量。调用hi()的时候改的是全局x,外层两次print读的都是myfunc里初始值为空串的局部x,自然两次输出都是Python is ,达不到第二次输出带OMG的预期。

修复方法

按照约束(不能把x声明为全局变量、仅修改myfunc内部代码),只需要把内层函数里的global换成nonlocal就行。nonlocal是Python嵌套函数场景专用的关键字,用来声明当前变量指向的是外层嵌套函数(非全局)的局部变量,对内层x的修改会直接同步到外层的x变量上。

修复后可直接运行的代码:

def myfunc():
  x = ""
  print("Python is " + x)
  def hi():
    nonlocal x
    x = "OMG"
  hi()
  print("Python is " + x)
    
myfunc()

运行后输出:

Python is 
Python is OMG

完全符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:45:35