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

自定义sum函数结合zip()求和触发TypeError,求错误原因解析

自定义sum函数触发TypeError的原因分析

先回顾下你最初的正确实现,用列表推导式结合zip()和Python内置的sum(),运行完全没问题:

a = [1,2,3]
b = [4,5,6]
three = [sum(i) for i in zip(a,b)]
print(three)

输出结果:[5, 7, 9]

但你尝试自己写函数实现相同功能时,却碰到了参数错误,你的代码是这样的:

def sum(a,b):
    for i in zip(a,b):
        return sum(i)
print(sum([1,2,3], [5,6,7]))

触发的错误提示:

return sum(i)
TypeError: sum() missing 1 required positional argument: 'b'

问题出在哪?

1. 函数名和内置sum()冲突了

你给自己的函数起了个名字叫sum,这直接把Python自带的sum()函数给覆盖了!当你在函数内部写sum(i)的时候,Python不会再调用那个可以接收单个可迭代对象的内置sum,而是会去找你定义的这个需要两个参数a和b的sum函数。你只传了一个参数i(也就是zip(a,b)返回的元组,比如第一个是(1,5)),自然就会报错说缺少第二个参数b。

2. 函数逻辑本身也有问题

就算你把函数名改成别的(比如sum_two_lists),现在的逻辑还是不对:你在for循环的第一次迭代就直接return了,这样函数只会返回第一对元素的和,根本不会遍历完所有配对的元素。

修正后的正确写法

咱们把函数名改得不冲突,同时修正逻辑:

def sum_two_lists(a, b):
    # 用列表推导式直接生成结果列表
    return [sum(pair) for pair in zip(a, b)]

# 或者用循环的方式写,更直观:
# def sum_two_lists(a, b):
#     result = []
#     for num1, num2 in zip(a, b):
#         result.append(num1 + num2)
#     return result

print(sum_two_lists([1,2,3], [5,6,7]))

运行后就能得到正确的输出[6, 8, 10]啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:06