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
相关产品推荐
相关产品推荐

