根据python中参数的数量调用递归函数

根据python中参数的数量调用递归函数,python,function,recursion,Python,Function,Recursion,我有一个函数,它接受两个参数并执行二进制操作: def foo(arg1,arg2): return operation(arg1,arg2) 我需要对这个函数进行泛化,如果传递了三个参数,它将返回操作(arg1,操作(arg2,arg3)),如果提供了四个操作(arg1,操作(arg2,操作(arg3,arg4)),等等。在python中可以这样做吗?您可以使用声明函数的形式来实现这一点;检查参数的长度是否为2,如果为2,则返回操作值,否则返回第一个参数的操作值以及剩余参数的foo:

我有一个函数,它接受两个参数并执行二进制操作:

def foo(arg1,arg2):
    return operation(arg1,arg2)
我需要对这个函数进行泛化,如果传递了三个参数,它将返回
操作(arg1,操作(arg2,arg3))
,如果提供了四个
操作(arg1,操作(arg2,操作(arg3,arg4))
,等等。在python中可以这样做吗?

您可以使用声明函数的形式来实现这一点;检查参数的长度是否为2,如果为2,则返回操作值,否则返回第一个参数的操作值以及剩余参数的
foo

def操作(arg1、arg2): 返回arg1+arg2 def foo(*args): 如果(len(args)==2): 返回操作(*args) 返回操作(args[0],foo(*args[1:])) 印刷(foo(1,3)) 印刷(foo(2,3,5)) 印刷(foo(1,2,3,4,5,6,7)) 输出:

4
10
28
注意:您可能还需要检查是否传递了0或1个参数,以防止出现“索引超出范围”错误。对于1个参数,您可以只返回输入值,例如

if(len(args)==1):
返回参数[0]
正如@wallefan在评论中指出的,有一个标准的库函数用于此:。您可以这样使用:

从functools导入reduce
打印(减少(操作,(1,3)))
打印(减少(操作,(2、3、5)))
打印(减少(操作,(1,2,3,4,5,6,7)))

输出与上面的
foo
函数相同。

是的,事实上它内置在标准库中:

导入工具
def操作(a、b):
返回a+b
#返回15
functools.reduce(操作,(1,2,3,4,5))
如果您愿意,您可以将其与Nick回答中提到的Varags结合使用:

导入工具
def操作(a、b):
返回a+b
def foo(*args):
返回functools.reduce(操作,参数)
#返回15
foo(1,2,3,4,5)

A
if len(args)==1:return args[0]
可以添加到函数
foo
,如果我们也为单个参数定义映射的话。最好提到有一个标准的库函数:@IoannisFilippidis同意-我已经写了一个注释,但是最好是code@wallefan的确我已经这样做了。如果OP不介意使用库,这肯定更简单。我会接受你的两个答案,但我只能接受一个。这解决了我的问题。非常感谢你