Python变量跨多函数无法保留修改值的技术求助
解决Python函数中变量修改后无法保留的问题
Python里int这类不可变类型,传递给函数时是传值而非传引用。你在函数内部修改var1、var2,只是创建了新的局部变量,完全不影响外部的原始var,这就是为什么最后打印结果始终是0。
下面是几种可行的修复方案:
方案1:接收函数返回值更新外部变量
这是最推荐的方式,通过函数返回修改后的值,重新赋值给原变量:
var = 0 def func1(var1): for i in range(x): for j in range(y): if condition: pass elif condition: # 接收func2返回的新值,更新var1 var1 = func2(var1) return var1 def func2(var2): if condition: pass elif condition: var2 += 1 return var2 # 把func1的返回值赋值给原var var = func1(var) print(var)
方案2:用可变类型包装变量
利用列表这类可变类型的特性,函数内部修改列表元素会同步到外部:
var = [0] # 用列表包装初始值 def func1(var1): for i in range(x): for j in range(y): if condition: pass elif condition: func2(var1) return var1 def func2(var2): if condition: pass elif condition: var2[0] += 1 # 修改列表内的元素 return var2 func1(var) print(var[0]) # 输出列表中的数值
方案3:使用全局变量(不推荐)
通过global关键字声明变量为全局,直接在函数内修改全局变量,但这种方式会增加代码耦合,不利于维护:
var = 0 def func1(): global var # 声明使用全局变量 for i in range(x): for j in range(y): if condition: pass elif condition: func2() def func2(): global var if condition: pass elif condition: var += 1 func1() print(var)
优先选择方案1,它逻辑清晰,符合Python的编程习惯,能避免不必要的副作用。
内容的提问来源于stack exchange,提问作者Tar-Eruntalion
相关产品推荐
相关产品推荐

