我正在尝试在python中进行乘法递归(乘以容器的所有值)。该函数将列表的元素作为位置参数(*n)接收。在执行时,我会收到错误,说"达到最大递归深度"。但是,如果我只是使用n而不是 *n并在列表中发送元素,则该代码正常工作。
代码不起作用:
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])
在第一个代码中,expression
multiply(n[1:])
只用一个参数调用multiply
。即,其余的清单。为了用等于列表 n[1:]
的内容的参数调用它,您再次使用SPLAT运算符,例如:
multiply(*n[1:])
当您告诉函数期望使用*n
的任意数量的位置参数时,您需要以这种格式来容纳它:使用多个参数,而不是包含所有参数的单个峰值。如果您的元素应用作参数,则在调用它时必须用*
拆开它。第二个函数之所以起作用,是因为它期望单个,可触觉的参数,并且您将其发送一个单一的,可观的参数。
用*n[1:]
替换n[1:]
。