Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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求和函数-`start`需要参数解释_Python_Sum - Fatal编程技术网

python求和函数-`start`需要参数解释

python求和函数-`start`需要参数解释,python,sum,Python,Sum,我试图理解内置的sum()函数的工作原理,但是start参数已经让我忘记了: a=[[1,20],[2,3]] b=[1,2,3,4,5,6] >>>总数(b,a) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:只能将列表(而不是“int”)连接到列表 >>>总数(a、b) [[[[[[1], 2], 3], 4], 5], 6, 1, 20, 2, 3] >a=[1,2] >>>b=[3,4] >>>总数(a、b) 回溯(最近一次呼叫最后一次): 文件“”,第1行

我试图理解内置的
sum()
函数的工作原理,但是
start
参数已经让我忘记了:

  • a=[[1,20],[2,3]]
    b=[1,2,3,4,5,6]
    >>>总数(b,a)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:只能将列表(而不是“int”)连接到列表
    >>>总数(a、b)
    [[[[[[1], 2], 3], 4], 5], 6, 1, 20, 2, 3]
    
  • >a=[1,2]
    >>>b=[3,4]
    >>>总数(a、b)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:只能将列表(而不是“int”)连接到列表
    >>>总数(b,a)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:只能将列表(而不是“int”)连接到列表
    
  • 我只是被这件事吓呆了,不知道发生了什么。下面是python文档要说的内容:。这并没有解释“如果开始不是字符串而不是整数怎么办?”

    a=[[1, 20], [2, 3]]
    b=[[[[[[1], 2], 3], 4], 5], 6]
    sum(b, a)
    
    此错误与start参数无关。列表中有两项
    b
    。其中一个是
    [1],2],3],4],5]
    ,另一个是
    6
    ,列表和int不能一起添加

    sum(a, b)
    
    这是补充:

    [[[[[[1], 2], 3], 4], 5], 6] + [1, 20] + [2, 3]
    
    这很好(因为您只是将列表添加到列表中)

    这正试图添加
    [3,4]+1+2
    ,这同样是不可能的。类似地,
    sum(b,a)
    正在添加
    [1,2]+3+4

    如果开始不是字符串,也不是整数,该怎么办

    sum
    无法对字符串求和。见:

    >>> sum(["a", "b"], "c")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: sum() can't sum strings [use ''.join(seq) instead]
    
    总和([“a”、“b”]、“c”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:sum()无法对字符串求和[改用''连接(seq)]
    Sum做了类似的事情

    def sum(values, start = 0):
        total = start
        for value in values:
            total = total + value
        return total
    
    sum([1,2],[3,4])
    扩展类似于
    [3,4]+1+2
    ,您可以看到它尝试将数字和列表添加到一起

    sum(a, b)
    
    为了使用
    sum
    生成列表,值应该是列表列表,而start可以只是列表。在失败的示例中,您将看到列表至少包含一些int,而不是所有列表

    通常情况下,您可能会考虑使用列表求和,将列表列表转换为列表

    sum([[1,2],[3,4]], []) == [1,2,3,4]
    

    但是你真的不应该这样做,因为这样做会很慢。

    其他答案中已经暗示但没有明确说明的一点是,start值定义了返回值和被求和项的
    类型。因为默认值是
    start=0
    ,(当然,0是一个整数),所以iterable中的所有项都必须是整数(或者使用处理整数的
    \uuuuuuuuuu添加\uuuuu
    方法的类型)。其他示例提到了串联列表:

    sum([[1,2],[3,4],[])==1,2,3,4]

    timedate.timedelta
    对象:

    sum([timedelta(1),timedelta(2)],timedelta())==timedelta(3)


    请注意,这两个示例都将iterable中类型的空对象作为开始参数传递,以避免获得
    类型错误:不支持+:“int”和“list”的操作数类型
    错误。

    我只是想澄清一些混淆。
    求和函数的签名应该是:

    sum(iterable,start=0) 
    
    而不是

    sum(values,start=0)
    
    如上所述。这一更改将使签名更清晰

    全功能:

    def sum(iterable,start=0):
           total=start
           for val in iterable:
                total+=val
           return total
    

    我仅对累积和使用
    start
    参数,因此类型仅为
    int
    。我不认为它适用于这种病理情况:)如文件所示:限制
    sum
    为数字:-)你会有更少的头痛。如果您必须串联嵌套列表,请进行一些显式构造-无论如何,您将拥有更多可维护的代码。更像是
    total=total+value
    ,这就是sum具有二次性能的原因lists@gnibbler是的。我没有想过。这似乎是一个评论/编辑建议,而不是一个单独的答案。请注意,
    sum
    builtin不接受关键字参数;参数的名称是无关紧要的。实际上,我试图解释内置的求和函数在实践中是如何工作的。
    sum(values,start=0)
    
    def sum(iterable,start=0):
           total=start
           for val in iterable:
                total+=val
           return total