Python带*args的自定义求和函数报错:为何sum函数无法处理?
问题分析与解决
嘿,我来帮你搞明白这个小问题~
你写的函数里,*args确实会把所有传入的位置参数收集成一个元组,比如调用sum_all_num(1,2,3)时,args就是(1,2,3)。但问题出在sum(*args)这一步:
- Python内置的
sum()函数的用法是sum(iterable, start=0),它需要第一个参数是可迭代对象(比如元组、列表),而不是一堆单独的数值。 - 当你写
sum(*args)时,相当于把元组args里的元素逐个拆出来传递给sum,也就是变成了sum(1,2,3)——这时候sum会把第一个参数1当成要迭代的对象,但整数是不可迭代的,自然就会抛出错误啦。
正确的写法
你只需要直接把args传给sum就行,因为args本身就是一个可迭代的元组:
def sum_all_num(*args): return sum(args)
举个例子
调用这个函数:
print(sum_all_num(1, 2, 3, 4)) # 输出 10
如果要传入一个列表或者元组作为参数,记得用*解包后再传:
nums = [5, 6, 7] print(sum_all_num(*nums)) # 输出 18
内容的提问来源于stack exchange,提问作者qing zhangqing
相关产品推荐
相关产品推荐

