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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:11