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

Python:如何让内部函数修改多个外部函数中的nonlocal变量

如何让内部函数修改多个外部函数作用域中的nonlocal变量?

嘿,这个问题其实挺容易解决的,咱们先从基础场景说起,再一步步到多变量的情况~

首先,当外部函数里有重复代码段时,把这些逻辑抽成内部函数来复用是个很棒的做法,比如这样:

def foo():
    def bar():
        print("执行重复的逻辑")
    
    # 第一次调用内部函数
    bar()
    # 做一些其他操作
    print("处理其他业务")
    # 第二次复用内部函数
    bar()

foo()

默认情况下,内部函数可以读取外部函数作用域里的变量,但如果想要修改这些变量,就得用nonlocal关键字来声明——这一步是关键。

那要修改多个外部变量的话,很简单:在nonlocal后面把你要修改的变量名用逗号分隔开就行。给你看个完整的示例,一目了然:

def foo():
    var1 = 10
    var2 = "初始值"

    def bar():
        # 声明要修改的多个外部变量
        nonlocal var1, var2
        var1 += 5
        var2 = "被内部函数修改后的新值"
    
    print("调用bar前:", var1, var2)
    bar()
    print("第一次调用bar后:", var1, var2)
    # 再次调用,复用修改逻辑
    bar()
    print("第二次调用bar后:", var1, var2)

foo()

运行这段代码,你会看到输出:

调用bar前: 10 初始值
第一次调用bar后: 15 被内部函数修改后的新值
第二次调用bar后: 20 被内部函数修改后的新值

这里还有两个小细节要注意:

  • nonlocal只能用于嵌套函数的外层作用域的变量,如果你要修改全局变量,得用global关键字,别搞混了。
  • 声明的变量名必须和外部函数里的变量名完全一致,不然Python会把它当成内部函数的局部变量,可能抛出UnboundLocalError。

内容的提问来源于stack exchange,提问作者tim-mccurrach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:37