在python中解压元素

在python中解压元素,python,list,function,sum,unpack,Python,List,Function,Sum,Unpack,在看到如下示例后: def sum(items): head, *tail = items return head + sum(tail) if tail else head 我不知道是否可以将其分别更改为打印头和剩余部分之和,因此我将其更改为: def sum(items): head, *tail = items return head, sum(tail) if tail else head 但是,当我测试它时,它返回到以下结果: sum([1,2,3]

在看到如下示例后:

def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head
我不知道是否可以将其分别更改为打印头和剩余部分之和,因此我将其更改为:

def sum(items):
    head, *tail = items
    return head, sum(tail) if tail else head
但是,当我测试它时,它返回到以下结果:

sum([1,2,3])
(1, (2, (3, 3)))
而不是

(1,5) 

我做错了什么?

这是因为您为每个递归创建了一个具有头和尾的元组。你似乎只想第一次分开他们,而不是每次。我将创建两个函数,一个用于分离头部和尾部,另一个用于递归:

def sum_items(items):
    head, *tail = items
    return head + sum_items(tail) if tail else head

def split_and_sum(items):
    head, *tail = items
    return head, sum_items(tail) if tail else head

split_and_sum([1,2,3])  # Returns (1, 5)

递归的原因是在不同的数据集上反复应用相同的逻辑。但是,由于您想做两件不同的事情,最好只使用不同的函数。

它不起作用,因为您使用的是
sum
内置函数,但由于您的函数名为
sum
,因此如果您更改函数名,它将起作用

因此,请尝试更改这一行:

def sum(items):
致:

调用函数时,请更改:

sum([1,2,3])
致:

那么结果将是:

(1, 5)

您的问题是您将函数命名为
sum
,这会覆盖内置的
sum
函数。但是很明显,您希望在自己的
sum
函数中调用内置的
sum
函数。那不行。您所做的是递归调用您自己的函数,而不是调用内置的
sum

只需重命名函数,即可获得预期结果:

def my_sum(items):
    head, *tail = items
    return head, sum(tail) if tail else head

x = my_sum([1,2,3])

print(x)
结果:

(1, 5)

您不应该定义自己的名为
sum
的函数,因为它隐藏了具有相同名称的内置函数。你的意思是递归调用你自己的
sum
函数,还是你认为内置的
sum
函数将在你的
sum
函数中被调用?为什么你希望
返回head,sum(tail)如果tail-else-head
来求和?你从来不加任何东西。您再次删除了附加项…只是为了让我们都清楚您的想法…您是想递归调用您自己的函数,还是想调用您自己的
sum
函数中的内置
sum
函数?任何一种方法都是有效的。你到底想在这里做什么?对,我想我的问题是我没有注意到函数在函数内部被调用。谢谢~
def my_sum(items):
    head, *tail = items
    return head, sum(tail) if tail else head

x = my_sum([1,2,3])

print(x)
(1, 5)