在嵌套子函数中使用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
相关产品推荐
相关产品推荐

