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

Python中如何让被调用函数更新作为参数传入的父函数局部变量

Python函数间局部变量修改同步的解决方案

核心原理

Python中所有参数传递都是传对象引用:

  • 你示例中用到的int属于不可变类型,在function_2中对参数做+=操作时,本质是创建了新的int对象,和function_1中原变量指向的内存地址已经不同,所以修改不会同步到外层函数
  • 只要让两个函数操作的是同一个可变对象的内部数据,就可以实现修改同步

方案1:用可变容器包裹不可变变量

这是改动最小的实现方案,把需要同步的不可变变量放到列表、字典这类可变容器中传入,修改容器的内部元素即可实现同步:

def function_1():
    # 用列表包裹int变量,列表是可变对象
    obj_list = [1, 2]
    function_2(obj_list)
    print("Original values add up to {}".format(obj_list[0] + obj_list[1]))

def function_2(obj_list):
    obj_list[0] += 1
    obj_list[1] += 2
    print("Updated values add up to {}".format(obj_list[0] + obj_list[1]))

if __name__ == '__main__':
    function_1()

运行结果:

Updated values add up to 6
Original values add up to 6

适用场景:需要同步的变量少,临时拆分逻辑不想改太多原有代码的场景。


方案2:用自定义类封装共享状态

如果需要同步的变量较多、逻辑关联性强,可以把变量封装为类的属性,传入类实例操作属性即可同步:

class SharedData:
    def __init__(self):
        self.object_1 = 1
        self.object_2 = 2

def function_1():
    data = SharedData()
    function_2(data)
    print("Original values add up to {}".format(data.object_1 + data.object_2))

def function_2(data):
    data.object_1 += 1
    data.object_2 += 2
    print("Updated values add up to {}".format(data.object_1 + data.object_2))

if __name__ == '__main__':
    function_1()

适用场景:共享变量多、相关逻辑复杂的工程化场景,代码可读性和可维护性更好。


方案3:返回修改后的值重新赋值(优先推荐)

如果没有硬性要求不能有返回值,这是最符合Python最佳实践的方案,没有隐式修改的副作用,逻辑更清晰易排查:

def function_1():
    object_1 = 1
    object_2 = 2
    # 接收返回值重新赋值
    object_1, object_2 = function_2(object_1, object_2)
    print("Original values add up to {}".format(object_1 + object_2))

def function_2(object_1, object_2):
    object_1 += 1
    object_2 += 2
    print("Updated values add up to {}".format(object_1 + object_2))
    # 返回修改后的值
    return object_1, object_2

if __name__ == '__main__':
    function_1()

适用场景:无特殊限制的所有场景,是Python官方推荐的写法,避免了可变对象隐式修改带来的调试难度。


内容的提问来源于stack exchange,提问作者AndrewE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:51:02