所以,我只是按照 Think Python 教程进入元组部分,我想问的是为什么这样做:
def sumall(*args):
return sum(args)
print sumall(1, 2, 3, 4)
和这个
sum(1,2,3,4)
不是吗?
所以,我只是按照 Think Python 教程进入元组部分,我想问的是为什么这样做:
def sumall(*args):
return sum(args)
print sumall(1, 2, 3, 4)
和这个
sum(1,2,3,4)
不是吗?
因为args
是一个元组,这是一个参数。以下内容与您的功能和工作方式相同:
sum((1,2,3,4))
如果没有额外的括号,您将sum()
使用四个单独的参数进行调用,因此第一个参数不是 4 个整数的元组,而只是一个整数。这不起作用,因为sum()
期望第一个参数是一个序列。可选的第二个参数可用于给出不同的起始值(默认为 0),这意味着sum()
最多需要 2 个参数。
内置sum
和您的sumall
. sum
接收一个可迭代的(通常是list
or tuple
)参数(总是一个参数!)并sumall
接收与您传递的一样多的参数。
这是为什么?因为您在函数签名中添加了星号,所以内置 sum 将定义如下:
def sum(args): # note: no asterisk here
result = 0
for val in args:
result += val
return result