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

如何通过patato函数修改变量a的值(附Python示例代码)

问题原代码
def patato(a):
    a += 1
def tomato():
    a = 0 
    patato(a)
    print(a)
tomato()

上述代码运行后输出为0,patato函数没有成功修改tomato函数内的变量a。

失效原因

Python传参走的是对象引用传递,且整数是不可变类型:

  • 调用patato(a)时,只是把tomato内a指向的整数0的引用,复制给了patato的形参(本质是函数内部的局部变量)
  • 执行a += 1时,因为整数不能原地修改,Python会生成一个值为1的新整数对象,让patato内部的局部a指向这个新对象,和tomato里的a完全没有关系了。
正确实现方法

最规范、可维护性最高的写法是让patato返回修改后的值,调用时用原变量接收返回值:

def patato(a):
    a += 1
    return a
def tomato():
    a = 0 
    a = patato(a)
    print(a)
tomato()

运行后输出1,符合修改预期。


如果一定要在不返回值的前提下实现修改(非常不推荐,会引入隐式副作用,大幅提升后续排查问题的成本),可以用可变类型(比如列表、字典)承载要修改的值,因为可变对象的修改是原地生效的:

def patato(a_container):
    a_container[0] += 1
def tomato():
    a = [0]  # 把值放在可变列表里
    patato(a)
    print(a[0])
tomato()

日常写代码优先选返回值赋值的方案,不要为了少写一行return搞隐式修改,后面踩坑的概率极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:31:15