1

所以,我只是按照 Think Python 教程进入元组部分,我想问的是为什么这样做:

def sumall(*args):
    return sum(args)
print sumall(1, 2, 3, 4)

和这个

sum(1,2,3,4)

不是吗?

4

2 回答 2

2

因为args是一个元组,这是一个参数。以下内容与您的功能和工作方式相同:

sum((1,2,3,4))

如果没有额外的括号,您将sum()使用四个单独的参数进行调用,因此第一个参数不是 4 个整数的元组,而只是一个整数。这不起作用,因为sum()期望第一个参数是一个序列。可选的第二个参数可用于给出不同的起始值(默认为 0),这意味着sum()最多需要 2 个参数。

于 2013-09-21T14:31:06.797 回答
1

内置sum和您的sumall. sum接收一个可迭代的(通常是listor tuple)参数(总是一个参数!)并sumall接收与您传递的一样多的参数。

这是为什么?因为您在函数签名中添加了星号,所以内置 sum 将定义如下:

def sum(args): # note: no asterisk here
  result = 0
  for val in args:
    result += val
  return result
于 2013-09-21T14:40:44.240 回答