Python 递归不适用于位置参数
我试图用Python实现乘法递归(将容器的所有值相乘)。函数接收列表中的元素作为位置参数(*n)。在执行时,我收到一个错误,上面写着“已达到最大递归深度”。但是,如果我只是使用n而不是*n并将元素发送到列表中,代码就可以正常工作 代码不工作: 工作代码:Python 递归不适用于位置参数,python,recursion,positional-parameter,Python,Recursion,Positional Parameter,我试图用Python实现乘法递归(将容器的所有值相乘)。函数接收列表中的元素作为位置参数(*n)。在执行时,我收到一个错误,上面写着“已达到最大递归深度”。但是,如果我只是使用n而不是*n并将元素发送到列表中,代码就可以正常工作 代码不工作: 工作代码: 在第一段代码中,表达式 乘法(n[1:]) 只使用一个参数调用multiply。即列表的其余部分。为了使用与列表内容相同的参数调用它,请再次使用splat运算符,如下所示: multiply(*n[1:])当您告诉函数使用*n期望任意数量的位置
在第一段代码中,表达式
乘法(n[1:])
只使用一个参数调用multiply
。即列表的其余部分。为了使用与列表内容相同的参数调用它,请再次使用splat运算符,如下所示:
multiply(*n[1:])
当您告诉函数使用*n
期望任意数量的位置参数时,您需要以这种格式容纳它:使用多个参数,而不是使用包含所有参数的单个iterable。如果您有一个iterable,它的元素应该用作参数,那么在调用它时必须使用*
对其进行解包。第二个函数可以工作,因为它需要一个iterable参数,而您发送给它一个iterable参数
将n[1://code>替换为*n[1://code>
def multiply(*n):
if n:
return n[0]*multiply(n[1:])
else:
return 1
multiply(5,1,4,9)
def multiply(n):
if n:
return n[0]*multiply(n[1:])
else:
return 1
multiply([5,1,4,9])