You need to enable JavaScript to run this app. 为何triple函数未执行正确数学运算 如何调整代码使输出从5变为15
优惠活动
大模型
产品
解决方案
定价
更多

为何triple函数未执行正确数学运算 如何调整代码使输出从5变为15

核心原因

你看到程序输出5的本质是Python针对不可变类型的传参机制:
Python中的整数属于不可变对象,当把外部变量作为参数传入函数时,函数形参会获得一份独立的值拷贝,和外部的原变量不存在内存绑定。原代码的逐行执行逻辑:

  • 在main函数中定义局部变量num,赋值为5
  • 调用triple(num)时,只是把num存储的数值5传递给triple的形参,两个作用域下的num是完全独立的局部变量
  • triple内部执行num = 3 * num时,只是给自身作用域的局部num重新赋值为15,不会改动main作用域下的num值
  • 回到main执行打印操作时,读取的还是原作用域下值为5的num,因此最终输出5。
调整为输出15的实现方案

推荐写法:通过函数返回值传递计算结果

这是最符合Python编码规范、可读性最高的实现方式,无额外副作用:

def main():
    num = 5
    # 接收triple返回的计算结果,重新赋值给本地变量
    num = triple(num)
    print(num)

def triple(num):
    # 直接返回三倍计算的结果
    return 3 * num

main()

运行上述代码即可稳定输出15。

非推荐写法:借助可变容器传递不可变值

如果刻意要保持原函数“直接修改传入值”的逻辑,因为整数无法原地修改,需要把数值包裹在列表、字典这类可变容器中传递:

def main():
    # 用单元素列表包装原始数值
    num = [5]
    triple(num)
    print(num[0])

def triple(num):
    # 修改可变容器内存储的元素,会同步影响外部的容器引用
    num[0] = 3 * num[0]

main()

注意:不要尝试在triple函数中通过global num关键字修改变量值,这种写法会把原本的局部变量提升为全局变量,造成不必要的全局状态污染,不符合函数封装的设计原则。
这类写法会引入不必要的复杂度,日常开发中不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 11:45:08