Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python元组和sum()查询_Python_Python 2.7_Tuples - Fatal编程技术网

Python元组和sum()查询

Python元组和sum()查询,python,python-2.7,tuples,Python,Python 2.7,Tuples,因此,我根据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个整数组成的元组,而是一个整数。这不起作用,因

因此,我根据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
接收一个iterable(通常为
list
tuple
)参数(始终为一个参数!),而
sumall
接收的参数与传递的参数相同

为什么呢?由于您在函数签名中添加了星号,因此内置和的定义如下所示:

def sum(args): # note: no asterisk here
  result = 0
  for val in args:
    result += val
  return result

非常感谢Martin,在过去的几天里,我可以感觉到我的大脑在扩展,就像我在开始学习Python之前从来没有想过一样。