所以,我根据Think Python教程继续学习元组部分,我想问的是为什么这样做有效:
def sumall(*args):
return sum(args)
print sumall(1, 2, 3, 4)
和这个
sum(1,2,3,4)
不
答案 0 :(得分:2)
因为args
是元组,它是一个参数。以下功能与您的功能相同:
sum((1,2,3,4))
如果没有额外的括号,则使用四个单独的参数调用sum()
,因此第一个参数不是4个整数的元组,而只是一个整数。这不起作用,因为sum()
期望第一个参数是一个序列。可选的第二个参数可用于给出不同的起始值(默认值为0),这意味着sum()
最多需要2个参数。
答案 1 :(得分:1)
内置sum
与sumall
之间存在细微差别。 sum
收到一个可迭代的(通常为list
或tuple
)参数(总是一个参数!),sumall
接收的参数数量与传递的数量相同。
为什么?因为您在函数签名中添加了星号,所以内置的sum将定义如下:
def sum(args): # note: no asterisk here
result = 0
for val in args:
result += val
return result