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

Python编写list_updater函数多次调用出现参数累加问题如何解决?

问题根源

你遇到的参数累加问题和*argv完全无关,是Python可变默认参数的固有特性:

  • 函数定义阶段就会完成默认参数的初始化,后续所有不传该参数的调用,都会复用同一个初始化好的对象
  • 你将collection的默认值设为[],且判断逻辑仅在collection == None时才重置为空列表,该判断永远不会触发,每次调用都是往同一个初始列表中追加内容,自然就会出现多次调用结果累加的问题。

修复方案

修改默认参数为不可变的None,每次调用时如果没有传入collection就新生成空列表,同时建议复制传入的collection内容,避免修改用户传入的原列表对象。
修复后的代码如下:

def list_updater(*argv, collection=None):
    # 未传入collection时使用新的空列表
    if collection is None:
        result = []
    else:
        # 复制原collection内容,不修改外部传入的列表
        result = collection.copy()
    # 追加所有位置参数
    result.extend(argv)
    return result

效果验证

运行你的测试用例:

print(list_updater(1,2,3))
print(list_updater('test','test'))
print(list_updater(9, 10, 25, collection=[7]))

输出结果完全符合预期:

[1, 2, 3]
['test', 'test']
[7, 9, 10, 25]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:11