Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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 递归不适用于位置参数_Python_Recursion_Positional Parameter - Fatal编程技术网

Python 递归不适用于位置参数

Python 递归不适用于位置参数,python,recursion,positional-parameter,Python,Recursion,Positional Parameter,我试图用Python实现乘法递归(将容器的所有值相乘)。函数接收列表中的元素作为位置参数(*n)。在执行时,我收到一个错误,上面写着“已达到最大递归深度”。但是,如果我只是使用n而不是*n并将元素发送到列表中,代码就可以正常工作 代码不工作: 工作代码: 在第一段代码中,表达式 乘法(n[1:]) 只使用一个参数调用multiply。即列表的其余部分。为了使用与列表内容相同的参数调用它,请再次使用splat运算符,如下所示: multiply(*n[1:])当您告诉函数使用*n期望任意数量的位置

我试图用Python实现乘法递归(将容器的所有值相乘)。函数接收列表中的元素作为位置参数(*n)。在执行时,我收到一个错误,上面写着“已达到最大递归深度”。但是,如果我只是使用n而不是*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])