*args in recursion: TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
*args in recursion: TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
我正在学习python。尝试在递归函数中使用 *args 作为参数(用于添加 'n' 数字),但出现错误: 下面是我的代码和错误:
def add(*n):
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1])
return sum
a = add(2,4,6)
print(a)
错误:
Traceback (most recent call last):
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 22, in <module>
a = add(2,4,6)
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 18, in add
sum = n[len(n)-1] + add(n[:-1])
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
请解释我做错了什么
n[:-1]
正在返回一个元组,要将最后一个值添加到 add(n[-1])
编辑:
工作解决方案:
def add(*n):
if len(n) == 1:
return n[0]
else:
return n[-1] + add(*n[:-1])
我建议一个更简单的设置:
def add(*n):
if len(n) == 1:
return n[0]
return n[0] + add(*n[1:]) # n[1:] gives the "rest" of a list, i.e. all elements after the first.
- 在一个函数定义 (
def add(*n):
)中,星星将多个单独的参数收集到一个列表中。
例如当您调用 add(2, 4, 6)
时,n
将是一个列表 [2, 4, 6]
- 在函数 调用 (
add(*n)
) 中,star 将一个列表扩展为多个单独的参数。
例如当您有 n = [2, 4, 6]
时,调用 add(*n)
就好像您调用了 add(2, 4, 6)
为了列出收集其参数的函数,您需要先将其展开。
您的代码做了第一件事,但没有做第二件事。这就是它不起作用的原因:
def add(*n): # <-- collecting multiple arguments into a list
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1]) # <-- not spreading list into multiple arguments
return sum
FWIW,更短的实现会像这样
def add(*n):
return 0 if not n else n[0] + add(*n[1:])
我正在学习python。尝试在递归函数中使用 *args 作为参数(用于添加 'n' 数字),但出现错误: 下面是我的代码和错误:
def add(*n):
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1])
return sum
a = add(2,4,6)
print(a)
错误:
Traceback (most recent call last):
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 22, in <module>
a = add(2,4,6)
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 18, in add
sum = n[len(n)-1] + add(n[:-1])
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
请解释我做错了什么
n[:-1]
正在返回一个元组,要将最后一个值添加到 add(n[-1])
编辑:
工作解决方案:
def add(*n):
if len(n) == 1:
return n[0]
else:
return n[-1] + add(*n[:-1])
我建议一个更简单的设置:
def add(*n):
if len(n) == 1:
return n[0]
return n[0] + add(*n[1:]) # n[1:] gives the "rest" of a list, i.e. all elements after the first.
- 在一个函数定义 (
def add(*n):
)中,星星将多个单独的参数收集到一个列表中。
例如当您调用add(2, 4, 6)
时,n
将是一个列表[2, 4, 6]
- 在函数 调用 (
add(*n)
) 中,star 将一个列表扩展为多个单独的参数。
例如当您有n = [2, 4, 6]
时,调用add(*n)
就好像您调用了add(2, 4, 6)
为了列出收集其参数的函数,您需要先将其展开。
您的代码做了第一件事,但没有做第二件事。这就是它不起作用的原因:
def add(*n): # <-- collecting multiple arguments into a list
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1]) # <-- not spreading list into multiple arguments
return sum
FWIW,更短的实现会像这样
def add(*n):
return 0 if not n else n[0] + add(*n[1:])